9

我正在使用 Laravel 4,特别是我正在寻找一个使用雄辩的 ORM 的答案。

我有一个表“任务”,其中包含分配给每一行的client_iduser_id 。

client_id指的是“ clients ”表中的客户端,user_id指的是“ users ”表中的用户。

我想做的:显示所有任务并显示“客户名称和“用户名字

所以结果在我的(刀片)视图中看起来像这样:

@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

2

我刚刚完成了这项工作,并自己学到了很多东西。我所做的是在 和 之间设置多对多关系usersclients并创建一个数据透视表来处理称为的关系,该关系tasks还存储每个任务的描述。

在这里输入太多了,但是您可以在http://paste.laravel.com/Fpv查看我的代码

于 2013-07-31T19:13:46.583 回答
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 回答