【问题标题】:Laravel 5.3 relationship issue, returns more than 1Laravel 5.3 关系问题,返回超过 1
【发布时间】:2016-12-27 19:01:30
【问题描述】:

我的查询有问题。 我有 3 个模型:Course、MainTask 和 Task。 Course 有很多 MainTask,而 MainTask 有很多 Task。

我将用户当前的 MainTask 存储在数据库中,我想选择具有主要任务的课程以及用户当前的主要任务和课程所在的任务。

我的尝试:

$tasks=Course::where('id',$current->current_course)->whereHas('mainTask', function ($q) use ($current)
    {
        $q->where('id',$current->current_main_task_id);
    })->with('mainTask.task')->first();

但这会返回所有主要任务,而不仅仅是 1。

class Course extends Model
{
    public function mainTask () {
        return $this->hasMany('App\MainTask');
    }
}

class MainTask extends Model
{
    use SoftDeletes;

    public function task () {
        return $this->hasMany('App\Task');
    }

    public function course () {
        return $this->belongsTo('Courses');
    }
}



class Task extends Model
{
    use SoftDeletes;
    public function mainTask () {
        return $this->belongsTo('MainTask');
    }
}

有什么建议吗?

谢谢

【问题讨论】:

    标签: php laravel relationship


    【解决方案1】:

    看起来从你的 mainTask 加载关系是最简单的:

    MainTask::with('course', 'task')->find($current->current_main_task_id);
    

    将加载 1 个主要任务及其课程和所有任务

    【讨论】:

    • 忘了说我已经存储了当前课程,我也需要检查一下
    • 你能详细说明一下吗?我不明白上下文。
    【解决方案2】:
     $tasks=Course::where('id',$current->current_course)
            ->with(['mainTask' => function ($q) use ($current)
        {
            return $q->where('id',$current->current_main_task_id);
        },'mainTask.task'])->first();
    

    【讨论】:

    • 请在代码中添加一些解释,以便其他人了解它是如何工作的
    猜你喜欢
    • 2017-04-28
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多