说我有3张桌子:
表1
+----+-------+
| id | name |
+----+-------+
| 1 | some |
| 2 | some2 |
+----+-------+
table2 :
+----+-------+
| 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时,一切都还可以。
出现问题(关于数据检索),因为我有 table2_id 中插入 null 值的情况。
Table1::find(1)->table2(); //Gives back the first entry OK (as array)
Table1::find(2)->table2(); //Gives back empty array
我的问题是:有没有办法将 table2_id 标记为可选(以便Laravel进行左连接而不是普通连接)?
答案 0 :(得分:1)
最简单的方法可能是完全跳过枢轴,并使其成为属于两个表的常规表+模型,但后者可选。