【发布时间】:2014-09-23 15:38:53
【问题描述】:
我在Command Eloquent 模型中以这种方式定义了一个 hasMany 关系:
public function rows()
{
return $this->hasMany('\Acme\Models\Row')
}
就我而言,行可以链接到命令,也可以不链接。所以我的Row 迁移文件包含一个可为空的外键:
$table->integer('command_id')->unsigned()->nullable()->index();
$table->foreign('command_id')->references('id')->on('commands')->onDelete('set null');
没有什么真正疯狂的。
我意识到如果我实例化一个新的Command 对象并调用$command->rows,而不是一个空集合,我会得到所有带有空command_id 的行。
$command->rows 调用生成的 SQL 完美地解释了这一点:
select * from `rows` where `rows`.`command_id` is null
我认为 Laravel 选择考虑有效的空外键很奇怪......你怎么看:这是一个错误吗?我错过了什么吗?防止这种行为的最佳方法是什么?
谢谢。
【问题讨论】:
-
这是奇怪的行为。我很想将其称为错误。毕竟,在 SQL
null <> null中,两个null值的连接不会返回任何值。 Eloquent 在这里做的事情很奇怪。 -
我会在 Github 上的 Laravel/Framework 上发布这个,看看 Taylor 怎么说...
-
好的,作为问题发布在 Github repo 中,这里:github.com/laravel/framework/issues/5289
标签: php sql laravel laravel-4 eloquent