第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試使用 attach() 填充中間表

嘗試使用 attach() 填充中間表

PHP
梵蒂岡之花 2021-06-15 09:26:09
我有名為users,places和 的表user_place。users有一個名為的列id,其中包含用戶的 ID,場所也有一個名為的列place_id。該user_place表有 2 列被調(diào)用user_id,place_id我試圖用相應(yīng)的 id 自動填充它們。我讀到我必須在建立關(guān)系后使用 attach() 函數(shù),我相信我已經(jīng)完成了,但我可能是錯的。他們來了: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);    }}用戶模型:class User extends \Eloquent implements Authenticatable{    use AuthenticableTrait;    public function places(){        return $this->hasMany('App\Place');    }}放置模式:class Place extends Model{    public function user(){        return $this->belongsToMany('App\User');    }}
查看完整描述

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);

    }

}


查看完整回答
反對 回復(fù) 2021-06-19
  • 1 回答
  • 0 關(guān)注
  • 155 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號