【发布时间】:2017-10-05 07:48:36
【问题描述】:
我有foo table、foo model 和foo controller。在test controller 我有函数index:
public function index()
{
return Foo::query(true)->filter(Request::input())->paginate()->appends(Request::input());
}
返回foo table中所有元素的列表。
1) 如何在此控制器中还从表bar 中返回字段bar_id,其中列type_id = 1?
2) 在表 bar 中,我有外键 bar_elements。元素bar如何返回所有bar_elements?
数据库结构
【问题讨论】:
-
你可以这样做
return Foo::query(true)->with('bars')->with('bar_elements')->filter(Request::input())->paginate()->appends(Request::input()); }假设你有bars和bar_elements在Foo 模型和Bar 模型中连续的关系。 -
@Maraboc 我尝试这样:
return Foo::query(true)->with('bars', Bar::whereTypeId('1'))->with('bar_elements')->filter(\Request::input())->paginate()->appends(\Request::input());,但得到这个 -ErrorException mb_strpos() expects parameter 1 to be string, object given -
不,你应该这样做
with(['bars' => function ($query) { $query->where('type_id', 1'); }])....:) -
@Maraboc
->with(['bar' => function($query){$query->where('id','1');}])->with('bar_elements')1) where not found 2)Call to undefined relationship [bar_elements] on model [App\Models\Foo(也许这必须是与 bar 的关系,但不是 foo)]。 -
是的,这就是我在评论中所说的!还有一件事就是这样
->with('bars.bar_elements')