使用attach()添加Model和Pivot Model之间的关系



我有一个名为UserWebpage的多对多关系的透视模型。

namespace App;
use IlluminateDatabaseEloquentRelationsPivot;
class UserWebpage extends Pivot
{
public function collections(){
return $this->belongsToMany('AppCollection', 'collection_user_webpage');
}
}

我还有一个型号叫Collection

namespace App;
use IlluminateDatabaseEloquentModel;
class Collection extends Model
{
public function user(){
return $this->belongsTo('AppUser');
}
public function userWebpages(){
return $this->belongsToMany('AppUserWebpage', 'collection_user_webpage');
}
}

我正在尝试在UserWebpage和Collection之间建立多对多关系。基于我发现的这个SO问题,我知道这样的事情应该是可能的:Laravel:如何使用多个数据透视表关系

我的问题是:

当我尝试插入UserWebpage实例和Collection实例之间的关系时,会出现以下错误。

插入关系的代码:

AppUserWebpage::where('user_id', $user->id)->take(2)->get()->each(function($user_webpage) use ($user){
$collection = factory(AppCollection::class)->create(['user_id' => $user_webpage->user_id]);
$collection->userWebpages()->attach($user_webpage->id);
});

我得到的错误:

Illuminate\Database\QueryException:SQLSTATE[42S22]:列不是找到:1054"字段列表"中的未知列"(SQL:插入collection_user_webpage(``,collection_id(值(1,1((

是否可以创建这种类型的关系?还是我错过了什么?

$foreignPivotKey的默认值在Pivot中不起作用,您必须明确指定它:

public function collections(){
return $this->belongsToMany('AppCollection', 'collection_user_webpage', 'user_webpage_id');
}

最新更新