9

私は Laravel 4 を使用しています。特に、雄弁な ORM を使用する回答を探しています。

各行に割り当てられたclient_iduser_idを格納するテーブル「tasks」があります。

client_idは「clients」テーブルのクライアントを参照し、 user_idは「users」テーブルのユーザーを参照します。

私がしたいこと:すべてのタスクを表示し、「clientsと「usersfirst_nameを表示します

したがって、結果は私の(ブレード)ビューでは次のようになります。

@foreach($tasks as $task)
    <tr>
        <td>{{ $task->user->first_name }}</td>
        <td>{{ $task->client->name }}</td>
        <td>{{ $task->description }}</td>
    </tr>
@endforeach

上記のビューは $task->client->name を完全に正常に吐き出しますが、残念ながら $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');
    }
}

これを機能させる方法についてのアイデアはありますか?私はしばらく頭を悩ませてきました - また、私はデータベース関係のプロではないことに注意してください。

4

2 に答える 2

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');
    }
}

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

于 2013-07-31T10:21:51.020 に答える