Php Laravel雄辩-访问二级模型关系
这个问题扩展了Laravel文档中提供的示例 这里的关系是一个用户有许多可以关联的角色对象。在这个扩展中,每个角色将与多个任务对象相关,这为我们提供了第二层多对多关系 使用雄辩的ORM,访问与用户相关的任务的最整洁的方式是什么 具体来说,下面的方法应该返回一个task_id数组Php Laravel雄辩-访问二级模型关系,php,laravel,model,eloquent,object-relational-model,Php,Laravel,Model,Eloquent,Object Relational Model,这个问题扩展了Laravel文档中提供的示例 这里的关系是一个用户有许多可以关联的角色对象。在这个扩展中,每个角色将与多个任务对象相关,这为我们提供了第二层多对多关系 使用雄辩的ORM,访问与用户相关的任务的最整洁的方式是什么 具体来说,下面的方法应该返回一个task_id数组 User::get_tasks($user_id) 尽管@JosephSilber的答案看起来很棒,但很不幸,当我测试它时,它不起作用,所以这里有一些在我的安装中起作用的东西: public static functi
User::get_tasks($user_id)
尽管@JosephSilber的答案看起来很棒,但很不幸,当我测试它时,它不起作用,所以这里有一些在我的安装中起作用的东西:
public static function get_tasks($id){
$tasks = static::with('roles.tasks')->find($id)->roles->lists('tasks');
$collection = new \Illuminate\Database\Eloquent\Collection();
foreach($tasks as $roleTasks){
$collection = $collection->merge($roleTasks);
}
return $collection;
}
就我个人而言,我会将语法更改为:
public function getTasks(){
$this->load('roles.tasks');
$tasks = $this->roles->lists('tasks');
$collection = new \Illuminate\Database\Eloquent\Collection();
foreach($tasks as $roleTasks){
$collection = $collection->merge($roleTasks);
}
return $collection;
}
User::find($user_id)->getTasks();
我认为最简洁的方法是使用hasManyThrough关系,如下所示:
class User extends Eloquent {
public function get_tasks()
{
return $this->hasManyThrough('Tasks', 'Roles');
}
}
您只需将
任务
和角色
修改为指定的相应模型。它将向您返回一份任务列表。希望这有帮助。对于id
仅使用联接,为了方便访问任务
模型,请使用此Nope,hasManyThrough
不适用于m-m关系。这取决于。根据问题中的描述,一个用户有多个角色,一个角色有多个任务。在这种情况下,它们都是一对多关系hasManyThrough
完成这项工作。你误读了这个问题:给我们第二个层次的多对多关系。
class User extends Eloquent {
public function get_tasks()
{
return $this->hasManyThrough('Tasks', 'Roles');
}
}