简单的SQL到Eloquent查询(Laravel)

时间:2013-06-21 15:00:58

标签: sql laravel eloquent

我有两个表:用户(用户)和组(组)。

    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();

现在这不起作用 - 我认为联接必须在选择之前,但我无法解决:(

2 个答案:

答案 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