我是laravel和eloquent的新手,我无法找到我想要做的事情的例子,假设我有三张桌子ABC,所有这些都有很多对很多关系发货A - ab - B - bc - C.
ab : table contains key from A and B.
bc : table contains key from B and C.
如果我想使用A(a_id = 1)找到C对象怎么办?
我尝试了类似A::find(1) -> B() -> C()->get() ;
B() is method i created to get B objects in A model.
C() is method i created to get C objects in B model.
我做错了什么? 我希望问题和例子都很清楚。
最好的问候。
答案 0 :(得分:1)
Eloquent提供hasManyThrough
关系快捷方式,但仅支持模型之间的一对多关系。 Laravel.io论坛上this thread有各种解决方法。以下是我已经测试过的that thread的简短解决方案。这需要添加到模型将扩展的基础模型中:
public function manyThroughMany($related, $through, $firstKey, $secondKey, $pivotKey)
{
$model = new $related;
$table = $model->getTable();
$throughModel = new $through;
$pivot = $throughModel->getTable();
return $model
->join($pivot, $pivot . '.' . $pivotKey, '=', $table . '.' . $secondKey)
->select($table . '.*')
->where($pivot . '.' . $firstKey, '=', $this->id);
}
然后在A
模型上,您可以定义一个返回此关系的关系方法:
public function c()
{
return $this->manyThroughMany('C', 'B', 'b_id', 'id', 'c_id');
}
并按如下方式访问相关条目:
A::find(1)->c()->get();
在这个帖子中也有一个class defining a relation用于这个目的,但我没有测试过,所以我不能说它是否正常工作。