繁体   English   中英

Laravel 5.3-HasMany Relationship不适用于Join语句

[英]Laravel 5.3 - HasMany Relationship not working with Join statement

我试图在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循环没有对每个符号的注释。 知道为什么联接会导致这种情况吗?

当您进行这样的联接时,如果未选择,则具有相同名称的属性将被覆盖。 因此,选择您的代码所需的属性,别无其他。 如下所示。

$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被覆盖,则会破坏关系。

而且,您必须小心,所有共享名称的字段都可能被覆盖并错误地解析到模型中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM