我正在尝试使用 laravel 5.3 中的 hasMany 检索带有注释的符号
符号.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 循环对每个符号都没有注释。知道为什么加入会导致这种情况吗?
当您进行这样的连接时,如果未选中,具有相同名称的属性将被覆盖。所以选择你的代码需要的属性,别无他物。如下所示。
$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 被覆盖,它会破坏关系。
而且您必须小心,所有共享名称的字段都可能被覆盖,并且错误地解析到模型中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句