查询关系

时间:2014-10-07 16:47:23

标签: laravel eloquent

我得到了这些表格:

table: investigation
id
name
start_city
end_city

table: city
id
name
start_city中的

end_cityinvestigation指的是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。我怀疑这种关系在某种程度上“被打破”了。我该如何解决?我尝试切换hasOnebelongsTo,但它不会改变任何内容。

PS:请不要对代码约定发表评论,因为我将这段代码从其他没有复数形式的语言中“翻译过来”。

1 个答案:

答案 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;