Php Laravel中with()之后的另一个模型中的OrderBy
我有一个问题,我正在尝试按链接表中的日期订购请求。 我有一个名为User的表和另一个名为Posts的表Php Laravel中with()之后的另一个模型中的OrderBy,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有一个问题,我正在尝试按链接表中的日期订购请求。 我有一个名为User的表和另一个名为Posts的表 User::with('posts') ->where('last_name', 'like', $search['lastname'] . '%') ->where('first_name', 'like', $search['firstname'] . '%') ->where('email', 'like', '%' . $search['ema
User::with('posts')
->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('date', 'asc');
})
->orderBy('posts.date', 'desc')
->paginate(15);
我该怎么做 您可以使用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();
目前,用户是主要的enity,因此,帖子的排序将在该用户的帖子中进行,而不是在所有帖子中进行全局排序。 我猜你想做一个全局排序,这意味着帖子应该按日期排序 尝试此操作在用户类中添加新关系
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);
谢谢你的帮助,但它不起作用。。。我想按帖子排序。根据请求创建的\给我一个用户的副本当他有多篇帖子时,我想得到一个用户和他的帖子,就像with()的结果,所以你想按帖子日期排序,你不关心用户的排序顺序?不,举个例子,我有一个变量用于按列排序