2013-07-31 19 views
9

私はLaravel 4を使用していますが、特に私は雄弁なORMを使用する答えを探しています。Laravel:雄弁を使って複数の関連テーブルから結果を返す

IはコンテナCLIENT_ID各行に割り当てUSER_IDテーブル "タスク" を有します。は「クライアント」テーブルとのuser_id上のクライアントを指し

client_idのは「ユーザー」テーブル上のユーザーを指します。私はをやりたい

:だから、結果は私の(ブレードで次のようになり、すべてのタスクを表示し、「クライアントと「ユーザーFIRST_NAME

を表示)ビュー:

上記のビューは、$ task-> client->名前を完璧に吐き出しますが、残念ながら "T私はライン$を追加するとき、「非オブジェクトのプロパティを取得するためにrying task-> USER-> first_nameの

私のコントローラは次のようになります。

$tasks = Task::with(array('user', 'client'))->get(); 
return View::make('index', compact('tasks')); 

私はそれを理解したように私のモデルがあまりにも違いを作ります、ので、私のモデルは次のようになります。

class Task extends Eloquent { 
    protected $guarded = array(); 
    public static $rules = array(); 

    public function client() { 
     return $this->belongsTo('Client'); 
    } 

    public function user() { 
     return $this->belongsTo('User'); 
    } 
} 

そして:

class User extends Eloquent implements UserInterface, RemindableInterface { 
    public function task() 
    { 
     return $this->hasMany('Task'); 
    } 
} 

そして:

class Client extends Eloquent { 
    public function projects(){ 
     return $this->hasMany('Project', 'client_id'); 
    } 
} 

どのようにしてこの作品を作成するのですか?私はしばらく私の頭を傷つけている - 私はデータベース関係のプロではないので、より簡単な説明はより簡単です:)

+0

で私のコードをチェックアウトすることができます。 EloquentのbelongsToMany()メソッドを使用して、クライアントとユーザーを直接リンクする必要があります。ピボットテーブルにフィールドを追加する方法については、[this](http://laravel.com/docs/eloquent#working-with-pivot-tables)を参照してください。 – ciruvan

+0

こんにちは@cuewizchris私はドキュメンテーションを見て、自分のニーズにユーザー/ロール/ピボットの例をどのように翻訳するのがうまくいかない。私はあなたのhasMany()をtoMany()に変更すべきだと言っていますか?私はここで少し失われています。 – Josh

答えて

2

私はちょうどこれを経て、自分自身でかなりのことを学びました。私がしたのは、usersclientsの多対多関係をセットアップし、という関係を処理するためのピボットテーブルを作成し、各タスクの説明も格納しました。

あなたのタスクテーブルは、多対多の関係で、ピボットテーブルであるように私には思われるここで入力するあまりだったが、あなたはhttp://paste.laravel.com/Fpv

+0

絶対に天才です。ありがとう、これは私が探していたものです。しかし、(これは私の質問の範囲を超えていることは認めている) - あなたのコントローラーのあなたの雄弁なクエリにページングやオーダービッド(例えばorder by created_at DESC)ステートメントを追加しようとすると、 orderBy created_atタスクのcreated_at日付ではなく、ユーザーのcreated_at日付を取得しようとしています。 – Josh

+0

私はいくつかのことを試しましたが、ページを読み込もうとすると失敗するようです。私はこれを行うための最善の方法は、ページ分割のためにarray_sliceを使用することであり、どのような並べ替え関数があなたに適していると仮定しています。 – user1669496

+6

「ここに入力するのはあまりにも多い」ことは決してありません。あなたのリンクを解決できません。 – DutGRIFF

0

Eloquentで多対多の関係を行うことができます:

class User extends Eloquent implements UserInterface, RemindableInterface { 
    public function client() 
    { 
     return $this->belongsToMany('Client', 'tasks', 'client_id')->withPivot('description'); 
    } 
} 

と逆の関係...

class Client extends Eloquent { 
    public function users() 
    { 
     return $this->belongsToMany('User', 'tasks', 'user_id'); 
    } 
} 

はこれをテストしていませんが、それは正しいはずです。

+0

私の知識の不足と質問の数についてお詫び申し上げますが、私の雄弁な質問は私のコントローラーのように見えますか? – Josh