Laravel pivot表null外键

时间:2017-04-21 12:41:59

标签: php laravel laravel-5.2

说我有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进行左连接而不是普通连接)?

1 个答案:

答案 0 :(得分:1)

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