<?php
class Cat extends Eloquent {
public function user() {
return $this->belongsTo('User');
}
}
class User extends Eloquent {
public function cats() {
return $this->hasMany('Cat');
}
}
Now:
$cats = Cat::with('user')->get();
Performs 2 queries:
select * from `cats`
select * from `users` where `users`.`id` in ('1', '2', 'x')
Why can't it just do:
select * from cats inner join users on cats.user_id = users.id
For those saying that there are both id columns in the table, that could be easily avoided with aliases:
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
UPDATE
Someone pointed out that Eloquent doens't know the columns of the tables from the models, but I guess they could provide a way to define them in the model so then it could use aliases and do a proper join instead of an extra query.