我得到了这些表格:
table: investigation
id
name
start_city
end_city
table: city
id
name
表start_city
中的 end_city
和investigation
指的是city.id
。
这是我的Investigation
型号:
public function start_city(){
return $this->hasOne('City', 'id', 'start_city');
}
public function end_city(){
return $this->hasOne('City', 'id', 'end_city');
}
City
型号:
public function start_city(){
return $this->belongsTo('Investigation', 'id', 'start_city');
}
public function end_city(){
return $this->belongsTo('Investigation', 'id', 'end_city');
}
Investigation
控制器:
public function show($id){
echo '<pre>';
var_dump(Investigation::find($id)->start_city->name);
}
我总是得到Trying to get property of non-object
。我怀疑这种关系在某种程度上“被打破”了。我该如何解决?我尝试切换hasOne
和belongsTo
,但它不会改变任何内容。
PS:请不要对代码约定发表评论,因为我将这段代码从其他没有复数形式的语言中“翻译过来”。
答案 0 :(得分:0)
将您的所有关系重命名为camelCase
:
public function startCity(){
return $this->hasOne('City', 'id', 'start_city');
}
public function endCity(){
return $this->hasOne('City', 'id', 'end_city');
}
和所有其他型号相同。
然后您可以使用dynamic properties
,如下所示:
$investigation->startCity;
否则你不能使用动态属性,你需要这个:
$investigation->start_city()->getResults()->name;