2 回答
TA贡献1802条经验 获得超4个赞
目前用户是主要实体,因此帖子的排序将在该用户的帖子中进行,而不是在所有帖子中全局排序。我猜您想进行全局排序,这意味着帖子应该按日期排序
试试这个在用户类中添加一个新关系
class User extends Model {
public function rpost() {
return $this->belongsTo(\where\ever\posts::class, 'user_id', 'id');
//inverse mapping from user --> posts table
//assuming posts table is using user_id column to track the ownership
//and user table has id as it's primary key
}
}
然后修改你的代码
User::with('rpost')
->select('posts.title'.'posts.id', 'users.name',
\DB::raw('(SELECT posts.date FROM posts WHERE user.id = posts.user_id ) as sort'))
->where('last_name', 'like', $search['lastname'] . '%')
->where('first_name', 'like', $search['firstname'] . '%')
->where('email', 'like', '%' . $search['email'] . '%')
->whereHas('posts', function ($query) use ($search) {
$query->where('reference', 'like', $search['reference'] . '%');
})
->orderBy('sort')
->paginate(15);
TA贡献1946条经验 获得超3个赞
您可以使用 sortBy
$users = User::with('posts')->get()
->sortBy(function($user) {
return $user->posts->created_at;
})
或者您可以将这样的连接与 orderBy 一起使用
$query = User::where('last_name', 'like', $search['lastname'] . '%')->where(
'first_name',
'like',
$search['firstname'] . '%'
)->where('customers.email', 'like', '%' . $search['email'] . '%');
$query = $query->join('posts', 'posts.user_id','=','users.id');
$query = $query->select('posts*','users.*');
$query = $query->orderBy('posts.created_at','asc');
$record = $query->get();
- 2 回答
- 0 关注
- 349 浏览
添加回答
举报
