mysql Laravel中关系的自定义orderBy序列

41zrol4v  于 2023-08-02  发布在  Mysql
关注(0)|答案(1)|浏览(115)

Laravel版本9.52.9,PHP版本8.2.4
我想显示一个只有组名的帖子列表:* 赞助商精选推广 *
另外,根据群组名称对帖子进行排序:* 特色(第一阶),助推(第二阶),赞助商(第三阶),...*

// Post Model
public function group()
{
    return $this->belongsTo(Group::class);
}

// Group Model
public function posts()
{
    return $this->hasMany(Post::class);
}

字符串

**更新:**如OMR所述。

Post::query()
    ->select([
        'posts.id', 'posts.slug', 'posts.created_at',
        'group_id', 'title', 'thumbnail', 'approved_at',
        'groups.name as group_name'
    ])
    ->selectRaw("LENGTH(content) - LENGTH(REPLACE(content, ' ', '')) + 1 AS total_content_word_count")
    ->without('permissions')
    ->join('groups', 'posts.group_id', '=', 'groups.id')
    ->whereIn('groups.name', ['sponsor', 'featured', 'boost'])
    ->where('ads', true)
    ->published()
->orderByRaw("FIELD(groups.name, 'featured','boost','sponsor') ASC")
->latest('approved_at')
->paginate(30);

有没有人知道,我如何在关系表上实现这一点?

rlcwz9us

rlcwz9us1#

MySQL FIELD()语法只适用于同一个表。
这不是很正确
MySQL FIELD()语法仅适用于查询表
要在查询范围内创建其他表,您应该连接它们。

Post::query()
    ->select(['posts.id', 'posts.group_id', 'title', 'slug', 'thumbnail', 'approved_at', 'created_at'])
    ->selectRaw("LENGTH(content) - LENGTH(REPLACE(content, ' ', '')) + 1 AS total_content_word_count")
    ->without('permissions')
    ->join('groups', 'posts.group_id', '=', 'groups.id')
    ->whereIn('groups.name', ['sponsor', 'featured', 'boost'])
    ->where('ads', true)
    ->published()
    ->orderByRaw("FIELD(groups.name, 'featured', 'boost', 'sponsor')")
    ->paginate(30);

字符串

相关问题