【问题标题】:Eloquent where condition based on a "belongs to" relationshipEloquent where 条件基于“属于”关系
【发布时间】:2014-07-21 04:01:34
【问题描述】:

假设我有以下模型:

class Movie extends Eloquent
{
    public function director()
    {
        return $this->belongsTo('Director');
    }
}

现在我想使用基于 director 表中的列的 where 条件来获取电影。

有没有办法做到这一点?找不到任何关于基于属于关系的条件的文档。

【问题讨论】:

    标签: laravel where eloquent belongs-to


    【解决方案1】:

    whereBelongsTo()

    对于新版本的 Laravel,您可以使用 whereBelongsTo()

    它看起来像这样:

    $director = Director::find(1);
    $movies = Movie::whereBelongsTo($director);
    

    更多内容请关注docs

    是()

    对于一对一的关系,可以使用is()

    $director = Director::find(1);
    $movie = Movie::find(1);
    
    $movie->director()->is($director);
    

    【讨论】:

      【解决方案2】:

      您可以试试这个(在Laravel 网站上查看Querying Relations):

      $movies = Movie::whereHas('director', function($q) {
          $q->where('name', 'great');
      })->get();
      

      另外,如果你像这样反转查询:

      $directorsWithMovies = Director::with('movies')->where('name', 'great')->get();
      // Access the movies collection
      $movies = $directorsWithMovies->movies;
      

      为此,您需要在 Director 模型中声明 hasmany 关系:

      public function movies()
      {
          return $this->hasMany('Movie');
      }
      

      如果你想将变量传递给function($q) { //$variable } 那么

      function($q) use ($variable) { //$variable }
      

      【讨论】:

      • 第一个确实有效!我什至没有尝试过,因为没有 whereHas 关系,而是一个 belongsTo。仍然不确定它为什么会起作用以及为什么没有 whereBelongsTo 条件。
      • Alpha,我想将一个变量传递给function($q) { //$variable }。我怎样才能做到这一点? (错误日志是“变量未定义”)。
      • function($q) use ($variable) { //$variable }
      • $movies = Movie::whereHas('director', function($q) { $q->where('name', 'great'); })->get(); whereHas 对我不起作用,而是以下代码完美运行$deliveries = Delivery::with(array('order' => function($query) { $query->where('orders.user_id', $customerID); $query->orderBy('orders.created_at', 'DESC'); })) ->orderBy('date') ->get(); 来源:laravel.io/forum/08-21-2014-where-on-with-relation Laravel 5.1
      • 如果我添加 hasmany 和 where 并在电影中传递参数,然后在电影中我可以编写参数来传递它们
      猜你喜欢
      • 2021-08-24
      • 2020-05-13
      • 2020-01-29
      • 2023-03-28
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多