说我有3个表:
table1
+----+-------+
| 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时,一切都可以。
问题发生(在数据检索上(,因为我有 null 值 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会使左JOIN而不是正常的加入(?
<(/div>最简单的方法可能只是完全跳过枢轴,并使之成为一个常规的表 模型,它属于两个表,但是后者是一个。