我发现Schema :: create()中列的命名会影响创建约束,因此Model在以后的查询中无法找到它。
Schema(simplefied):
Schema::create('page_elements', function(Blueprint $table)
{
$table->increments('id');
$table->integer('page_element_type_id')->unsigned();
$table->foreign('page_element_type_id')->references('id')->on('page_element_types')->onUpdate('cascade')->onDelete('restrict');
$table->timestamps();
});
当我打电话
PageElement::find(1)->first()->type()->get()
我得到空集。
在Shema中更改这2行后(仅将page_element_type_id
更改为type_id
):
$table->integer('type_id')->unsigned();
$table->foreign('type_id')->references('id')->on('page_element_types')->onUpdate('cascade')->onDelete('restrict');
我在集合中得到了1个元素,就像它应该的那样。
任何人都知道是否存在一些命名问题或规则,关于带有约束的列?
EDID: 模型中的type()声明,如要求:
public function type()
{
return $this->belongsTo('App\PageElementType');
}
答案 0 :(得分:3)
你能展示你的type
功能吗?
我敢打赌你没有使用第二个参数来设置具有外键的列的名称,因此将其更改为:
return $this->belongsTo('App\YourModel', 'page_element_type_id');