Laravel pivot table 空外键
Laravel pivot table null foreign key
假设我有 3 个 tables:
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');
}
}
当我插入 pivot table 两个 id 时一切正常。
出现问题(在数据检索时),因为我在 table2_id.[= 中插入 null 值的情况17=]
Table1::find(1)->table2(); //Gives back the first entry OK (as array)
Table1::find(2)->table2(); //Gives back empty array
我的问题是:有没有办法将table2_id标记为可选(这样Laravel进行左连接而不是正常连接)?
最简单的方法可能是完全跳过枢轴,并使其成为常规 table + 属于两个 table 的模型,但后者是可选的。
假设我有 3 个 tables:
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');
}
}
当我插入 pivot table 两个 id 时一切正常。
出现问题(在数据检索时),因为我在 table2_id.[= 中插入 null 值的情况17=]
Table1::find(1)->table2(); //Gives back the first entry OK (as array)
Table1::find(2)->table2(); //Gives back empty array
我的问题是:有没有办法将table2_id标记为可选(这样Laravel进行左连接而不是正常连接)?
最简单的方法可能是完全跳过枢轴,并使其成为常规 table + 属于两个 table 的模型,但后者是可选的。