0

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

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

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

4

2 回答 2

1

我认为你在这里混淆了一些事情......

您正在Eloquent与较低级别的DB::table('foo')->select()语法混合。当您想使用 Eloquent 时,我建议您查看有关 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();并为您构建和运行查询。

于 2013-06-21T15:32:04.860 回答
0

数据库:查询生成器(DB)不是 Eloquent(ORM):

数据库查询构建器您必须告知表名和字段,就像它在laravel 文档的相关链接中所说的那样: “......提供了一个方便、流畅的界面来创建和运行数据库查询。” 像下面的这些查询:

$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相关(查看您的文件迁移)并且该类扩展了 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

于 2019-10-04T18:32:41.233 回答