我有两个表:用户(用户)和组(组)。
Users
-----------------
id | username | group
1 | Bob | 2
Groups
-----------------
id | name
1 | firstgroup
2 | secondgroup
我想显示:users.ID,users.username,group.name(1,Bob,secondgroup) 像这样的SQL语句可以工作:
SELECT Users.id, Users.username, Groups.name
FROM Users
INNER JOIN
Groups ON Groups.id = Users.group
但是,我很难在Eloquent中写这个,因为没有“FROM”。目前我正在寻找下面的内容,使用JOINS(http://laravel.com/docs/queries#joins)
$users = Users::select('id','username', 'Groups.name')->joins('Groups.id', '=', 'id')->get();
现在这不起作用 - 我认为联接必须在选择之前,但我无法解决:(
答案 0 :(得分:1)
我认为你在这里混淆了一些事情......
您正在将Eloquent
与较低级DB::table('foo')->select()
语法混合使用。如果您想使用Eloquent,我建议您查看docs about relationships in Eloquent。
您应该像这样定义模型:
class User extends Eloquent {
public function group()
{
return $this->belongsTo('Group', 'group');
// second parameter is necessary because you didnt
// name the column "group_id" but simply "group"
}
}
class Group extends Eloquent {
public function users()
{
return $this->hasMany('User', 'group');
}
}
这将设置您稍后可能需要的所有联接。然后,您只需使用User::with('group')->all();
并构建并运行查询。
答案 1 :(得分:0)
数据库:查询生成器(DB)并非雄辩(ORM):
数据库查询构建器,您必须告知表名称和字段,就像相关laravel文档的link中所说的那样:“ ...为创建和运行提供方便,流畅的界面数据库查询”。类似于以下查询:
$users = DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->get();
Eloquent是ORM-与对象相关的映射,这意味着您的类User与表 users 相关(请查看您的文件Migrations),并且该类扩展了Model类,因此您可以访问如下所示的方法:
class User extends Models
{
public static function usersWithGroups(){
return User::select('id', 'name', 'email')->with('groups')->get();
}
}
观察该方法已进入User类,因此您可以以静态方式“ User ::” 进行访问,使用Eloquent,您将拥有许多隐藏的静态方法,这些方法将改善您的时间编码,因为您要继承de Model方法,有关更多详细信息,请访问Eloquent Docs,网址为:Eloquent Docs