![](/img/trans.png)
[英]Get instance of Eloquent model from generic DB query in Laravel 5.1
[英]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.