Laravel 使用attach()添加模型和透视模型之间的关系
我有一个多对多关系的轴心模型,叫做UserWebpageLaravel 使用attach()添加模型和透视模型之间的关系,laravel,eloquent,laravel-5.6,Laravel,Eloquent,Laravel 5.6,我有一个多对多关系的轴心模型,叫做UserWebpage namespace App; use Illuminate\Database\Eloquent\Relations\Pivot; class UserWebpage extends Pivot { public function collections(){ return $this->belongsToMany('App\Collection', 'collection_user_webpage');
namespace App;
use Illuminate\Database\Eloquent\Relations\Pivot;
class UserWebpage extends Pivot
{
public function collections(){
return $this->belongsToMany('App\Collection', 'collection_user_webpage');
}
}
我还有一个叫Collection的模型
namespace App;
use Illuminate\Database\Eloquent\Model;
class Collection extends Model
{
public function user(){
return $this->belongsTo('App\User');
}
public function userWebpages(){
return $this->belongsToMany('App\UserWebpage', 'collection_user_webpage');
}
}
我试图在UserWebpage和Collection之间建立多对多关系。我知道这样的事情应该是可能的,基于这个问题,我发现:
我的问题是:
当我尝试在UserWebpage实例和Collection实例之间插入关系时,出现以下错误
插入关系的代码:
App\UserWebpage::where('user_id', $user->id)->take(2)->get()->each(function($user_webpage) use ($user){
$collection = factory(App\Collection::class)->create(['user_id' => $user_webpage->user_id]);
$collection->userWebpages()->attach($user_webpage->id);
});
我得到的错误是:
Illumb\Database\QueryException:SQLSTATE[42S22]:列不可用
在“字段列表”中找到:1054未知列“”(SQL:插入到
collection\u user\u网页
(``,collection\u id
)值(1,1))
是否可以创建这种类型的关系?还是我遗漏了什么?在
Pivot
中,$foreignPivotKey
的默认值不起作用,您必须明确指定它:
公共函数集合(){
返回$this->belongTomany('App\Collection','Collection\u user\u webpage','user\u webpage\u id');
}
您的收藏和用户主键是什么?您已经说过多对多关系赌注。用户网页和集合,但您的UserWebpage
正在扩展Pivot
模型类?为什么?@usrnotfind My Collection主键是Collection\u id,对于UserWebpage,它是user\u webpage\u id。@Wreigh我想使用Pivot模型类。UserWebpage表示一个关系,为了在另一个关系中使用它,我为它创建了一个Pivot模型类。在中的Laravel文档中,在“定义自定义中间表模型”下对其进行了描述。谢谢,这个版本适合我。基本上,我必须在Collection类的userWebpages方法中这样做。在指定了第3个和第4个参数之后,我能够插入集合实例和UserWebpage实例之间的关系。