2

我正在尝试在 Eloquent 中加入 3 个表,即用户、部门和角色。一个用户只能有一个部门和一个角色。以下是我定义模型的方式:

用户模型:

    public function department(){
        return $this->has_one('Department', 'department_id');
    }

    public function role(){
        return $this->has_one('Role', 'role_id');
    }
}

<?php
class Department extends Eloquent 
{
    public static $key = 'department_id';
    public static $table = 'sys_departments';
    public static $timestamps = false;

    public function user(){
        return $this->belongs_to('User', 'user_id');
    }
}

角色

class Role extends Eloquent 
{
    public static $key = 'role_id';
    public static $table = 'sys_roles';
    public static $timestamps = false;

    public function user(){
        return $this->belongs_to('User', 'user_id');
    }

    public function transaction(){
        return $this->has_many('Transaction', 'transaction_id');
    }
}

这是我在控制器中访问它们的方式:

$user = User::with(array('department', 'role'))->where('user_id', '=', 1)->first();
echo $user->department->department;

它正在产生这些查询:

SELECT * FROM `tbl_users` WHERE `user_id` = '1' LIMIT 1
SELECT * FROM `tbl_users` WHERE `user_id` = '1' LIMIT 1
SELECT * FROM `sys_departments` WHERE `department_id` IN ('1')
SELECT * FROM `sys_roles` WHERE `role_id` IN ('1')

有任何想法吗?

4

1 回答 1

4

我相信你混淆了关系方法,来自 laravel 文档

class User extends Eloquent {

 public function phone()
 {
      return $this->has_one('Phone', 'my_foreign_key');
 }
}

标识符my_foreign_key是电话表中外键的名称,它引用用户 ID(关系的所有者)。所以在你的情况下

public function department(){
    return $this->has_one('Department', 'your_user_id');
}

其中your_user_id是您在 deparments 表中用于引用其所属用户的字段。以及您提供的其他示例

当前您正在设置外键以引用同一个表而不是其所有者。

于 2012-11-27T01:29:42.407 回答