首页 > 解决方案 > 在这个 laravel 查询中返回每个问题的第一个问题的选项

问题描述

此 laravel 查询中每个问题返回的第一个问题的选项。

$questions = Question::with('option')
                ->join('categories', function($join) use ($category) {
                    $join->on('categories.id','=','questions.category_id');
                    $join->where('categories.title', '=', $category);
                })
                ->inRandomOrder(5)->get();

问题类。

public function option()
{
    return $this->hasMany(Option::class);
}

选项类。

public function question()
    {
        return $this->belongsTo(Question::class);
    }

标签: phplaraveleloquent

解决方案


您的查询选择所有列:select * from questions join categories ...

因此,这些categories列会覆盖questions具有相同名称的列。

您必须限制选定的列:

$questions = Question::with('option')
    ->join('categories', function($join) use ($category) {
        $join->on('categories.id','=','questions.category_id');
        $join->where('categories.title', '=', $category);
    })
    ->inRandomOrder(5)
    ->get(['questions.*']);

或使用whereHas()

$questions = Question::with('option')
    ->whereHas('categories', function($query) use($category) {
        $query->where('title', '=', $category);
    })
    ->inRandomOrder(5)
    ->get();

推荐阅读