繁体   English   中英

如何在laravel 5.4 orm中做多个has()/ orHas()

[英]how can do a multiple has() /orHas() in laravel 5.4 orm

首先,我应该说我想使用laravel ORM而不是查询生成器,而不是Raw sql方法。 所以这是我的问题。

我有一个名为bots的模型,该模型具有belongTo(User::class)关系和6 hasMany(TextPost::class) hasMany(PhotoPost::class)等。 我想获得在任何hasMany(...)关系中至少具有一个记录的机器人。 因此,如果漫游器在TextPost有记录,则应将其返回;如果漫游器在hasMany(...)关系中均无任何记录, TextPost应将其返回。

到目前为止,我的User模型中有类似的内容

    public function broadCasters()
    {
        return $this->bots->has('text_post')->orHas('photo_post')->orHas('media_post')->orHas('video_post')->orHas('audio_post')->orHas('document_post');
    }

但它不起作用,并说Call to a member function orHas() on boolean

所以我想将其更改为以下内容:

public function broadCasters(){
  return $this->bots->where(function($query){
    return $query->has('TextPost')->orHas('PhotoPost') ...;
  });
}

但这也不起作用,并且说Missing argument 2 for Illuminate\\Support\\Collection::where() 我该怎么办?

我使用laravel 5.4。 bu我看到这个问题在多个关系上存在-laravel 5.4及其与我想要的非常接近,但还没有答案!

这个问题也是我的另一个问题, 在Laravel中结合AND / OR雄辩的查询

但它也不起作用。

现在正是我不想要的,我认为是因为它适用于LARAVEL 4,而我使用LARAVEL 5.4

Laravel雄辩的多重has和where子句

如果您使用$this->bots ,结果将是laravel collection array。 您需要像这样使用$this->bots()

public function broadCasters(){
  return $this->bots()->where(function($query){
    return $query->has('TextPost')->orHas('PhotoPost') ...;
  })->get();
}

暂无
暂无

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

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