我使用eloquent构建查询但我已陷入最后阶段。
$city = City::where('name', $event)->first()->event;
这是有效的并返回此城市的所有3个事件,如屏幕截图所示
我试过以下
$city = City::where('name', $event)->first()->event->where('id', 1);
并且它给了我以下错误
Call to undefined method Illuminate\Database\Eloquent\Collection::where()
答案 0 :(得分:2)
你的榜样毫无意义,因为你只需要:
$eventId = 1;
Event::find($eventId);
如果你想检查这是否与城市有关:
Event::where('city_id', $cityId)->find($eventId); // Event model or null
或者在这种情况下有点复杂,但是任何关系类型的通用解决方案:
Event::whereHas('city', function ($q) use ($cityId) {
$q->where('id', $cityId);
})->find($eventId); // model or null
最后,如果您使用find
代替where
:
City::where('name', $event)->first()->event->find(1);
City::where('name', $event)->first()->event()->find(1);
它将返回相同的Model
。
这是因为find
它在查询构建器的上下文中基本相同:
City::where('name', $event)->first()->event()->where('id', 1)->first();
// equals to:
City::where('name', $event)->first()->event()->find(1);
但它也是一种收集方法:
$someCollection->find($someId); // returns single Model
答案 1 :(得分:0)
如果您已经拥有id
(1),则可以执行以下操作:
$city = City::where('name', $event)->where('id', 1)->first();
但我认为你更想要city_id
:
$city = City::where('name', $event)->where('city_id', 3)->first();
答案 2 :(得分:0)
解决方案是使用event() - >而不是事件 - > 此查询返回关系的第一条记录,这是我需要的。 谢谢大家!
$city = City::where('name', $event)->first()->event()->where('id', 1)->get();