在 Laravel 中构建查询表达式时需要帮助
Posted
技术标签:
【中文标题】在 Laravel 中构建查询表达式时需要帮助【英文标题】:Need Help in Building a Query Expression in 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');
通过使用此功能,我得到了登录用户完成的所有任务,但我想得到登录用户未完成的任务。
【问题讨论】:
【参考方案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 的回答,但第一个解决了我的问题以上是关于在 Laravel 中构建查询表达式时需要帮助的主要内容,如果未能解决你的问题,请参考以下文章