此问题扩展了Laravel文档中提供的示例Eloquent : Working With Pivot Tables。Laravel雄辩 - 访问二级模型关系
这里的关系是一个用户有很多角色它可以涉及的对象。在这个扩展中,每个角色都将与许多Task对象相关联,从而为我们提供了二级多对多关系。
使用雄辩的ORM,访问用户所涉及的任务的最新方式是什么?
具体来说,有以下方法应该返回task_ids
User::get_tasks($user_id)
此问题扩展了Laravel文档中提供的示例Eloquent : Working With Pivot Tables。Laravel雄辩 - 访问二级模型关系
这里的关系是一个用户有很多角色它可以涉及的对象。在这个扩展中,每个角色都将与许多Task对象相关联,从而为我们提供了二级多对多关系。
使用雄辩的ORM,访问用户所涉及的任务的最新方式是什么?
具体来说,有以下方法应该返回task_ids
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();
use Illuminate\Database\Eloquent\Collection;
class User extends Eloquent {
// ... relation methods...
public function get_tasks($id)
{
$tasks = static::with('roles.tasks')->find($id)->roles->lists('tasks');
return (new Collection(array_flatten($tasks)))->unique();
}
}
我认为最巧妙的方法是使用hasManyThrough关系如下:
class User extends Eloquent {
public function get_tasks()
{
return $this->hasManyThrough('Tasks', 'Roles');
}
}
你只需要修改Tasks
和Roles
你命名的相应模型。它会返回一份任务清单。希望这可以帮助。
对于'ids'只使用连接,为了方便访问'Task'模型,请使用这个http://stackoverflow.com/a/26187648/784588 –