Laravel嵌套在使用雄辩的地方

时间:2014-09-02 13:50:37

标签: php laravel eloquent

我使用eloquent构建查询但我已陷入最后阶段。

$city = City::where('name', $event)->first()->event;

这是有效的并返回此城市的所有3个事件,如屏幕截图所示

enter image description here

我想为事件执行另一个地方,所以我只能根据标准选择1,但它不起作用。

我试过以下

$city = City::where('name', $event)->first()->event->where('id', 1);

并且它给了我以下错误

Call to undefined method Illuminate\Database\Eloquent\Collection::where()

3 个答案:

答案 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();