2017-04-21 62 views
2

說我有3個表:Laravel透視表無效外鍵

表1

+----+-------+ 
| id | name | 
+----+-------+ 
| 1 | some | 
| 2 | some2 | 
+----+-------+ 

表2

+----+-------+ 
| id | name | 
+----+-------+ 
| 1 | some | 
| 2 | some2 | 
+----+-------+ 

table1_table2

+-----------+-----------+---------------------+ 
| table1_id | table2_id |  settings  | 
+-----------+-----------+---------------------+ 
|   1 | 1   | {'something':false} | 
|   2 | null  | {'something':false} | <--- :(
+-----------+-----------+---------------------+ 

然後我會在以下型號

class Table1 extends Model { 
    [...] 
    public function table2() 
    { 
     return $this->belongsToMany('Table2', 'table1_table2', 'table1_id', 'table2_id') 
      ->withPivot('settings'); 
    } 
} 

class Table2 extends Model { 
    [...] 
    public function table1() 
    { 
     return $this->belongsToMany('Table1', 'table1_table2', 'table2_id', 'table1_id') 
      ->withPivot('settings'); 
    } 
} 

一切都是好的,當我在數據透視表這兩個ID插入。

問題時(上數據檢索),因爲我有其中I插入table2_id案件。

Table1::find(1)->table2(); //Gives back the first entry OK (as array) 
Table1::find(2)->table2(); //Gives back empty array 

我的問題是:有沒有一種方法,以紀念table2_id可選(這樣Laravel使左連接,而不是正常的加入)?

+1

嗯...是的,不要把它作爲一個支點? :)您可以使用兩個belongsTo關係,並使第二個可選。我想這會使邏輯更清潔。 –

+0

我最終提出瞭解決方案,因爲這是唯一不幸的方法。當你不得不從一個框架轉換到另一個時很難:D –

+0

很高興它的工作。 :) –

回答

1

最簡單的方法可能是完全跳過數據透視表,並將其設置爲屬於這兩個表的常規表格+模型,但可以選擇使用後者。

+1

謝謝你,祝你有美好的一天:) –