Laravel 5.3 - HasMany 关系不适用于 Join 语句

StackOverflower

我正在尝试使用 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章