Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel中with()之后的另一个模型中的OrderBy_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

Php Laravel中with()之后的另一个模型中的OrderBy

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的表和另一个名为Posts的表

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()的结果,所以你想按帖子日期排序,你不关心用户的排序顺序?不,举个例子,我有一个变量用于按列排序