1. 程式人生 > 實用技巧 >Laravel 模型關聯 多對多

Laravel 模型關聯 多對多

定義

在Model中定義方法,呼叫belongsToMany

belongsToMany常用引數說明:

引數位置 引數名 定義
1 $related 關聯模型的類名
2 $table 中間表名
3 $foreignPivotKey 當前模型在中間表裡的欄位名
4 $relatedPivotKey 關聯模型在中間表裡的欄位名
public function posts()
{
  return $this->belongsToMany($this, 'wechat_multi_post_post', 'multi_post_id', 'post_id')
            	->orderBy('wechat_multi_post_post.index')
            	->withPivot('index');
}

獲取中間表字段

利用模型中的pivot屬性訪問,但是預設只有兩個模型的key,如果需要額外的欄位需要在定義時用withPivot宣告需要的欄位名

根據中間表排序

在定義關聯的時候可以用orderBy排序

更新中間表資料

  1. sync 同步更新中間表

    1. 根據id更新

      $this->posts()->sync($postIds);
      
    2. 需要更新額外的欄位

      $this->posts()->sync([1=>['index'=>0], 2=>['index'=>1]]);
      
  2. syncWithoutDetaching 只增加不減少

  3. toggle 切換

  4. 更新已存在的記錄

    //array $attributes
    $this->posts()->updateExistingPivot($postId, $attributes);