关于关联模型的问题

求助, 我现在有这么三个表
passage
id | uid | type_id | content

users
id | username

type
id | typename

Passage model 里面这么写的
public function user(){
    return $this->hasOne('User', 'id', 'uid');
}

public function type(){
    return $this->hasOne('Type', 'id', 'type_id');
}
然后我想把这三个表关联起来, 就这么写
$data = Passage::find(1)->user->type;
结果什么也查不出来, 单独查一个倒是可以, 请问我应该怎么写, 或者是关联模型用错了??
已邀请:

xlimit

赞同来自: Lich

$data = Passage::find(1)->user->type;

这个代码表现的是,Passage和user关联,user和type关联。

你的Passage model 里面这么写的
public function user(){
return $this->hasOne('User', 'id', 'uid');
}

public function type(){
return $this->hasOne('Type', 'id', 'type_id');
}

这里表现出User和Type与Passage有关联,Type与Passage有关联,不代表Type和User有关联,

你需要在User中添加
public function type(){
return $this->hasOne('Type', 'id', 'type_id');
}

下面的代码才能生效
$data = Passage::find(1)->user->type;

雨师

赞同来自:

Passage::find(1)->user返回的是一个collection了,而不是user的model。

你这种情况应该可以用预先加载解决,一次加载多个关系,用get获得数据。

查询多个表关联也可以试试用查询生成器查询,直接用连接,其实就是类似于写SQL语句了。这是我的思路。

要回复问题请先登录注册