我的数据库里有这样一张桌子
User (id, name)
UserHasTask (id, active, user_id, task_id, test)
Task (id, name)因此,对于一个用户,我可以检索所有任务,活动与否。当我编辑一个任务时,这个任务的每一个引用都会被更改(我使用类似于任务模板的内容)。
我想做以下工作:当UserHasTask->test不是null时,我想要对任务的名称执行这个值。
所以如果我有:
User(10, 'John')
UserHasTask(20, 1, 10, 5, 'my_value')
Task(5, 'Task n°5')查询User::find(10)->getTaskByID(20)->task->name应该给我Task n°5my_value
我目前正在UserHasTask中使用这个函数
public function name()
{
$name = $this->task->name;
if(isset($this->test))
return $name . $this->test
return $name;
}但我不得不做这个User::find(10)->getTaskByID(20)->name()而不是User::find(10)->getTaskByID(20)->task->name
发布于 2018-04-11 07:52:45
使用hasManyThrough关系:
参考laravel https://laravel.com/docs/5.6/eloquent-relationships#has-many-through
可以指定中间UserHasTask表。
发布于 2018-04-11 07:53:59
你应该试试这个
在用户模型中的应用
public function tasks()
{
return $this->belongsToMany(Task::class, 'UserHasTask');
}控制器中的
$user_tasks = User::find($user_id)->tasks; // all tasks assign to user
$task_name = array();
foreach($user_tasks as $user_task){
$task_name[] = $user_task->name;
}https://stackoverflow.com/questions/49769291
复制相似问题