我正在尝试使用laravel 5.3中的hasMany检索带有注释的符号
Symbol.php
public function comments() {
return $this->hasMany('App\Comment');
}
Comment.php
public function symbol() {
return $this->belongsTo('App\Symbol');
}
我跑的时候:
$symbols = Symbol::with('comments')->paginate(100);
我得到正确的输出(列出所有符号及其注释)
@foreach ($symbols as $s)
{{ $s->name }}
@foreach ($s->comments as $c)
{{ $c->body }}
@endforeach
@endforeach
但是当我在语句中添加连接时:
$symbols = Symbol::with('comments')
->join('ranks', 'symbols.id', '=', 'ranks.symbol_id')
->join('prices', 'symbols.id', '=', 'prices.symbol_id')
->paginate(100);
foreach循环没有对每个符号的注释。知道为什么连接会引起这种情况吗?
答案 0 :(得分:1)
当你进行这样的连接时,如果没有选择,将覆盖具有相同名称的属性。因此,请选择代码所需的属性,而不是其他任何属性。如下图所示。
$symbols = Symbol::with('comments')
->join('ranks', 'symbols.id', '=', 'ranks.symbol_id')
->join('prices', 'symbols.id', '=', 'prices.symbol_id')
->select('symbols.*', 'ranks.importantAttribute', 'prices.importantAttribute')
->paginate(100);
基本上我认为你的id被两个连接覆盖了,因为它们也有id字段,我在连接时遇到了类似的问题,如果id被覆盖,它会破坏关系。
您必须小心,所有共享名称的字段都可以被覆盖并在模型中被错误地解析。