相关疑难解决方法(0)

按多列排序Eloquent集合的语法是什么?

我知道在使用查询构建器时,可以使用多列进行排序

...orderBy('column1')->orderBy('column2')
Run Code Online (Sandbox Code Playgroud)

但现在我正在处理一个集合对象.集合有sortBy方法,但我无法弄清楚如何使它适用于多列.直觉上,我最初尝试使用相同的语法orderBy.

sortBy('column1')->sortBy('column2)
Run Code Online (Sandbox Code Playgroud)

但这显然只是按顺序应用排序,最终按列2排序,忽略column1.我试过了

sortBy('column1', 'column2')
Run Code Online (Sandbox Code Playgroud)

但是抛出错误"asort()期望参数2为long,字符串给出".运用

sortBy('column1, column2')
Run Code Online (Sandbox Code Playgroud)

不会抛出错误,但排序看起来很随机,所以我真的不知道实际上是做什么的.我查看了sortBy方法的代码,但不幸的是我很难理解它是如何工作的.

php eloquent laravel-4

43
推荐指数
3
解决办法
2万
查看次数

laravel雄辩地按关系排序

我有3个型号

  • 用户
  • 渠道
  • 答复

模范关系

  • userbelongsToMany('App\Channel');
  • channelhasMany('App\Reply', 'channel_id', 'id')->oldest();

假设我有2个频道 - 频道1 - 频道2

channel-2 有最新的答复 channel-1

现在,我想通过其频道的当前回复来订购用户的频道.就像一些聊天应用程序.我怎样才能像这样订购用户的频道?

  • 通道2
  • 通道1

我已经尝试了一些代码.但什么都没发生

// User Model
public function channels()
    {
        return $this->belongsToMany('App\Channel', 'channel_user')
                    ->withPivot('is_approved')
                    ->with(['replies'])
                    ->orderBy('replies.created_at'); // error

    }
// also
public function channels()
    {
        return $this->belongsToMany('App\Channel', 'channel_user')
                    ->withPivot('is_approved')
                    ->with(['replies' => function($qry) {
                        $qry->latest();
                    }]);
    }
// but i did not get the expected result
Run Code Online (Sandbox Code Playgroud)

编辑 也,我试过这个.是的,我确实得到了预期的结果,但如果没有回复,它将不会加载所有频道.

public function channels()
{
    return $this->belongsToMany('App\Channel')
                ->withPivot('is_approved')
                ->join('replies', 'replies.channel_id', '=', 'channels.id') …
Run Code Online (Sandbox Code Playgroud)

php mysql laravel laravel-5

11
推荐指数
1
解决办法
2万
查看次数

标签 统计

php ×2

eloquent ×1

laravel ×1

laravel-4 ×1

laravel-5 ×1

mysql ×1