2016-03-02 135 views
0

我有一个问题,即地方不对头分为两个部分:我试图让那里回函=中USER_ID记录的特定事件向下钻取laravel雄辩关系

1)。

2)然后过滤event_date < =今天获取过去的事件。

我在#1卡住了。当我运行

$favorites = Event::with('rsvps')->get(); 

我得到所有的包括,这是很好的回函的事件,但基于该回函的信息,我不能过滤。

[ 
{"id":1,"user_id":"1","created_at":"2016-03-01 02:26:48","updated_at":"2016-03-01 02:26:48","event_name":"Awesome Event","event_venue":"The Rainbow Room","address":"612 Rachael Ln.","event_details":"Epic","event_date":"03\/12","image":"2016-03-01-02-26-48-heartHands.jpg","time":"8:00", 
"rsvps":[ 
{"id":1,"created_at":"2016-03-01 02:28:39","updated_at":"2016-03-01 02:28:39","event_id":"1","user_id":"1"}] 
}, 

{"id":2,"user_id":"1","created_at":"2016-03-01 02:40:05","updated_at":"2016-03-01 02:40:05","event_name":"New Event","event_venue":"My House","address":"612 Rachael Ln.","event_details":"Epic","event_date":"03\/01","image":"2016-03-01-02-40-05-img3.jpg","time":"8:00", 
"rsvps":[ 
{"id":2,"created_at":"2016-03-01 02:40:12","updated_at":"2016-03-01 02:40:12","event_id":"2","user_id":"1"}, 

{"id":3,"created_at":"2016-03-01 22:21:33","updated_at":"2016-03-01 22:21:33","event_id":"2","user_id":"2"} 
]} 
] 

当我运行一个测试,以刚刚得到的回函与USER_ID = 1:

$favorites = Event::with('rsvps')->find('id')->where('rsvps->user_id', '1')->get(); 

它给我的错误:对空调用一个成员函数,其中()

有人能给我一个线索,知道我做错了什么吗?

回答

0

您需要查询关系rsvps。您正试图查询events

$favorites = Event::whereHas('rsvps', function($q) { 
    $q->where('user_id', 1) 
})->find('id'); // Passing in 'id' won't work here, it should be the actual id of an event. 
+0

太棒了!非常感谢 –

+0

'with'负责急切的加载数据,并且与实际查询rsvps限制事件无关。您正在寻找'has'而不是 – Otto

+0

我修改的代码是拾取所有事件,而不仅仅是具有特定ID的事件: '$ myFavs = Event :: with(['rsvps'=> function($ q) {$ {0}}其中('user_id',2); }]) - > get();' –