繁体   English   中英

Laravel雄辩的查询使用户从另一个模型

[英]Laravel Eloquent query get users from another model

我有另一个表tableb,它具有通过user_id字段定义的用户关系。

我想对某个日期在某个范围内的tableb进行查询,但是我想获取与该行关联的用户表,但是我只希望它在尚未获取的情况下获取用户。 我正在尝试在1个数据库查询中完成所有这些操作。 我已经完成了大部分工作,但是我在其中的独特部分上遇到了麻烦。

这是我现在所拥有的:

    $tableB = TableB::select('users.*')
    ->join('users', 'tableb.user_id', '=', 'users.id')
    ->where('tableb.start_date', '>', date('Y-m-d'))
    ->get();

所以现在我在同一用户的tableB中有3个条目,理想情况下,我只想为该用户获得1个条目。

我将如何去做呢?

由于您仅选择用户数据,因此只需在查询中添加groupBy子句即可。

$tableB = TableB::select('users.*')
    ->join('users', 'tableb.user_id', '=', 'users.id')
    ->where('tableb.start_date', '>', date('Y-m-d'))
    ->groupBy('users.id')
    ->get();

您应该像这样添加groupBy

$tableB = TableB::select('users.*')
    ->join('users', 'tableb.user_id', '=', 'users.id')
    ->where('tableb.start_date', '>', date('Y-m-d'))
    ->groupBy('users.id')
    ->get

试试这个代码

App/user.php

public function getrelation(){      
      return $this->hasMany('App\tableB', 'user_id');
}

在您的控制器中

Controller.php

use App/user;

public funtion filterByDate(user $user)
{
    $date = '2016-02-01';
    $result = $user->WhereHas('getrelation', function ($query) use($date) {
                                    $query->whereDate('tableb.start_date', '>', $date)
                                          ->first();
                        });    
}

暂无
暂无

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

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