1 回答

TA貢獻1821條經(jīng)驗 獲得超6個贊
在多對多關(guān)系中,您應(yīng)該定義兩個關(guān)系,如下所示:
用戶名
class User extends \Eloquent implements Authenticatable
{
use AuthenticableTrait;
public function places()
{
return $this->belongsToMany('App\Place', 'user_place', 'user_id', 'place_id');
} // ^^^^^^^^^^^^
}
注意:鑒于您的中間表名稱不遵循我們指定的命名約定,因此 Laravel 知道要查找表的位置。
地方.php
請注意,您提到您的 Place 模型的主鍵是place_id,這也與Laravel 約定不同,您應(yīng)該指定它:
protected $primaryKey = 'place_id'; // <----
class Place extends Model
{
public function user()
{
return $this->belongsToMany('App\User', 'user_place', 'place_id', 'user_id');
}
}
所以現(xiàn)在在你的控制器中:
class PlaceController extends Controller
{
public function likePlace(Request $request)
{
$placeId = $request['placeId'];
$userId = $request['userId'];
$user = User::where('id', $userId)->first();
$place = new Place();
$place->place_id = $placeId;
$place->save();
$user->places()->attach($place);
}
}
邊注
正如我所指出的,您可以節(jié)省幾行用等效的句子替換一些句子:
$userId = $request['userId'];
$user = User::where('id', $userId)->first();
使用find()方法,這等于:
$user = User::find($request['userId']);
然后,您可以使用createEloquent 模型的靜態(tài)方法創(chuàng)建相關(guān)對象,如下所示:
$placeId = $request['placeId'];
$place = new Place();
$place->place_id = $placeId;
$place->save();
等于這個:
$place = Place::create(['place_id' => $request['placeId']]);
然后你的控制器將減少到這個:
class PlaceController extends Controller
{
public function likePlace(Request $request)
{
$user = User::find($request['userId']);
$place = Place::create(['place_id' => $request['placeId']]);
$user->places()->attach($place);
}
}
- 1 回答
- 0 關(guān)注
- 155 瀏覽
添加回答
舉報