Laravel pivot table null foreign key



说我有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>

最简单的方法可能只是完全跳过枢轴,并使之成为一个常规的表 模型,它属于两个表,但是后者是一个。

最新更新