<?php
class Cat extends Eloquent {
public function user() {
return $this->belongsTo('User');
}
}
class User extends Eloquent {
public function cats() {
return $this->hasMany('Cat');
}
}
现在:
$cats = Cat::with('user')->get();
执行2个查询:
select * from `cats`
select * from `users` where `users`.`id` in ('1', '2', 'x')
为什么不能只是这样做呢:
select * from cats inner join users on cats.user_id = users.id
对于那些说表中有两个id列的人,可以通过使用别名轻松避免这种情况:
select
c.id as cats__id,
c.name as cats__name,
c.user_id as cats__user_id,
b.id as users__id,
b.name as users__name
from cats c
inner join users b on b.id = c.user_id
更新:
有人指出Eloquent不能从模型中了解表格的列,但我想他们可以提供一种定义模型中列的方法,这样它就可以使用别名并执行适当的联接而不是额外的查询。
Cat
上的user_id
不可为空,每个Cat
都属于一个User
...那么为什么不使用inner join
呢? - empzbelongsTo
表示它总是属于某个表的,所以外键不能为空。他们可以再添加一个名为canBelongTo
的选项,允许外键为空,在这种情况下将使用左连接。不知道,只是随便说说... - empzselect *
也可以。 - dav