【问题标题】:Need Help in Building a Query Expression in Laravel在 Laravel 中构建查询表达式时需要帮助
【发布时间】:2020-05-31 14:29:03
【问题描述】:

我最近开始使用 Laravel,但遇到了一个查询问题。我正在开发一个任务应用程序,用户可以在其中完成管理员发布的不同任务。

我只想获取登录用户未完成的那些任务。当用户完成一项任务时,我有第三张表已完成任务,其中存储了 user_id 和 task_id。

这就是我的表格的样子:

用户表(由 Laravel auth 创建的默认表) 属性:id,name,email,password

任务表 属性:id,name,description

Completed_task 表 属性:id、user_id、task_id

我尝试使用 completed_task 表作为支点来使用用户和任务之间的 belongsToMany 关系

用户模型中的关系函数

public function tasks(){
    return $this->belongsToMany('App\Task', 'completed_task', 'user_id','task_id');
}

通过使用此功能,我得到了登录用户完成的所有任务,但我想得到登录用户未完成的任务。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    请试试这个:

    $tasks = Tasks::whereNotIn('id', function($query) {
            $query->select('task_id')
            ->from('completed_task')
            ->where('user_id', '=', auth()->user()->id);
    })->get();
    

    这应该为您提供登录用户尚未完成的所有任务(请检查表格和字段名称)

    【讨论】:

      【解决方案2】:

      所有模型函数如下所示:

      用户.php

      // A user has many tasks
      public function tasks(){
        return $this->hasMany(Task::class);
      }
      

      Task.php

      // A Task belongs to User
      public function users(){
        return $this->belongsTo(User::class);
      }
      
      // A task has a completed status
      public function completed(){
        return $this->hasOne(Completed::class);
      }
      

      Completed.php

      // A Completed status belongs to a Task
      public function tasks(){
        return $this->belongsTo(Task::class);
      }
      

      【讨论】:

      • 谢谢,Talha 的回答,但第一个解决了我的问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 2018-04-06
      相关资源
      最近更新 更多