共有3种型号:
First (first_id)
Connection (connection_id, first_id, product_id)
Second (second_id, product_id)
我想使用laravel关系将三个模型连接在一起
First
->通过first_id
加入了Connection
Connection
->通过first_id
加入First,然后通过Second
加入product_id
Second
->通过product_id
因此:首先通过连接first_id
,product_id
是否可以使用类似HasManyThrough
的东西?
感谢您的时间
答案 0 :(得分:1)
在您的第一个模型上:
public function second () {
return $this->hasManyThrough(
Second::class,
Connection::class,
'product_id', // Foreign key on connection table
'product_id', // Foreign key on second table
'first_id', // Local key on first table
'first_id' // Local key on connection table
);
}
根据您的描述,列名应该起作用。
在修补程序中,您可以执行First::first()->second
之类的操作来验证其是否正确连接。
答案 1 :(得分:1)
这取决于您的第一个模型和第二个模型共享的关系类型以及第二个和第三个模型共享的关系类型。
如果考虑您的第一个模型First
和第二个模型Second
共享一对一关系,以及Second
模型和Third
模型共享一个一个关系。
它将是$first->second->third;
//没有很多直通关系要求
如果您的First
模型和Second
模型共享为hasMany-relations关系,则您需要使用hasManyThrough关系
来自doc
的示例class Country extends Model
{
public function posts()
{
return $this->hasManyThrough(
'App\Post',
'App\User',
'country_id', // Foreign key on users table...
'user_id', // Foreign key on posts table...
'id', // Local key on countries table...
'id' // Local key on users table...
);
}
}
答案 2 :(得分:1)
您可以尝试使用嵌套关系。
嵌套的渴望加载 为了渴望加载嵌套关系,可以使用“点”语法。例如,让我们急切地在一项雄辩的陈述中加载本书的所有作者和作者的所有个人联系人:
$books = App\Book::with('author.contacts')->get();
图书模型:
public function author()
{
return $this->hasOne('App\Author');
}
作者模型:
public function contacts()
{
return $this->hasMany('App\Author');
}
文档: