2014-11-14 71 views
0

背景: 我在做什麼是我做了一個頁面顯示與複選框的參加者和事件的表。它一直在工作,直到我試圖通過屬於許多關係的透視表查詢我的複選框。laravel檢查數據透視返回錯誤包含()非對象

我已經看過一些其他線程,並嘗試使用相同的方法來檢查現有條目數據的支點。我正在使用contains()函數來查看我的與會者和scheduled_program_segment是否匹配,但出於某種原因,我的代碼得到了此錯誤。

問題:

我得到的錯誤Call to member function contains() on a non-object

這裏是我的代碼,我想有點是培訓相關

@foreach(Auth::user()->attendee as $attendee) 
        <td class="col-lg-1"> 
        {{ 
         Form::checkbox(
          ($program->name . $attendee->first_name), 
          '1', 
          $attendee->scheduled_program_segments->contains($attendee->id) 
         ) 
        }} 

我試圖改變到$與會者爲好。同樣的錯誤。
此外,當我運行

{{$attendee->scheduled_program_segments()->get()}} 

我得到它我假設意味着我有透視表和模型建立正確的追隨者,但是它不工作,所以也許我錯了這裏。

[{"id":"1","created_at":"2014-11-14 15:19:44","updated_at":"2014-11-14 15:19:44","name":"Minecraft","description":"","date":"2014-11-06","cost":"20.00","start_time":"16:30:00","end_time":"17:30:00","location":"Cookstown","scheduled_program_id":"1","program_segment_id":"1","pivot":{"attendee_id":"1","scheduled_program_segment_id":"1"}},{"id":"1","created_at":"2014-11-14 15:19:44","updated_at":"2014-11-14 15:19:44","name":"Minecraft","description":"","date":"2014-11-06","cost":"20.00","start_time":"16:30:00","end_time":"17:30:00","location":"Cookstown","scheduled_program_id":"1","program_segment_id":"1","pivot":{"attendee_id":"1","scheduled_program_segment_id":"1"}}]

+0

請你用你的模型更新你的問題?特別是Attendee班。 – lukasgeiter 2014-11-14 21:08:58

回答

1
$attendee->scheduled_program_segments 

是毫米的關係,所以很明顯它返回null,因爲Laravel 4+關係需要是爲了爲dynamic properties工作(camelCased這是你想要做什麼)。

所以,你可以你的關係重命名爲scheduledProgramSegments()然後調用它:

$attendee->scheduledProgramSegments 
// or 
$attendee->scheduled_program_segments // yes, this will work as well 

或更改線路如下(我寧願不建議):

$attendee->scheduled_program_segments()->get()->contains(...) 
+0

因此,我開始將所有模型關係函數更改爲camelCase,然後我意識到我的數據庫使用了snake_case。糾正我,如果我錯了,但這是大多數數據庫的標準。這使事情變得複雜,因爲我不想在訪問模型數據時考慮哪種情況......無論是駱駝還是所有蛇......但不是混合! (字段數據將像'name-> first_name'一樣被訪問,因爲'first_name'是數據庫中的字段......但是program_segment會是'name-> ProgramSegment',非常令人困惑:S – Phil 2014-11-17 17:44:55

+0

像上面說的那樣 - 'snake_cased'關係也會起作用(作爲動態屬性) – 2014-11-17 19:16:35

+0

是的,我決定使用 - > get() - >包含所以我可以保留所有snake_case,即使它沒有被建議 – Phil 2014-11-17 19:46:26