【发布时间】:2014-08-10 23:34:16
【问题描述】:
我有 4 张桌子:
conversations
- id (pk)
- userId1 (fk)
- userId2 (fk)
users
- id (pk)
- name
- surname
.
.
.
- roleId (fk)
- userStatusId (fk)
roles
- id (pk)
- type (fk)
user_status
- id (pk)
- description (fk)
这是我的模型:
class Conversation extends Eloquent {
public function user1(){
return $this->hasOne('User', 'id', 'userId1');
}
public function user2(){
return $this->hasOne('User', 'id', 'userId2');
}
}
class User extends Eloquent {
public function role(){
return $this->hasOne('Role', 'id', 'roleId');
}
public function userStatus(){
return $this->hasOne('UserStatus', 'id', 'userStatusId');
}
// public function conversation1(){
// return $this->belongsToMany('Conversation', 'id', 'userId1');
// }
// public function conversation2(){
// return $this->belongsToMany('Conversation', 'id', 'userId2');
// }
}
class UserStatus extends Eloquent {
public $timestamps = false;
protected $table = 'user_status';
public function user(){
return $this->belongsToMany('User', 'id', 'userStatusId');
}
}
class Role extends Eloquent {
public $timestamps = false;
public function user(){
return $this->belongsToMany('User', 'id', 'roleId');
}
}
现在我想做的是,例如,获取“userId1”(在对话中)属于状态“描述”等于“已注册”的“用户”的所有对话。
我就是这样做的:
Route::get('/', function(){
$conversation = Conversation::with(array('user1.userStatus' => function ($query){
$query->where('description', '=', 'registered');
}))->get();
foreach ($conversation as $conv) {
echo '<br \>';
echo $conv;
}
});
我希望收到 userId1 的状态为“已注册”的所有对话记录,仅此而已...相反,我收到的是所有对话记录,以及每个对话记录的用户记录和userStatus 表(最后我只收到与 where 子句匹配的表和不具有空值的表)。
我知道我的英语很糟糕,但我希望有人能理解并帮助我。谢谢!
【问题讨论】:
标签: laravel eloquent eager-loading