2

この質問は、Laravel ドキュメントで提供されているEloquent : Working With Pivot Tablesの例を拡張したものです。

ここでの関係は、Userが関連付けることができる多くのRoleオブジェクトを持っているということです。この拡張機能では、各 Role が多数の Task オブジェクトに関連付けられ、第 2 レベルの多対多の関係が提供されます。

Eloquent ORM を使用して、ユーザーが関連するタスクにアクセスする最も適切な方法は何でしょうか?

具体的には、次のメソッドは task_ids の配列を返す必要があります

User::get_tasks($user_id)
4

3 に答える 3

2
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();
    }

}
于 2015-01-11T21:17:54.040 に答える
0

@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();
于 2015-01-11T22:06:02.253 に答える