2

Eloquent の 3 つのテーブル、つまりユーザー、部門、役割を結合しようとしています。ユーザーは、1 つの部門と 1 つのロールのみを持つことができます。モデルを定義した方法は次のとおりです。

ユーザーモデル:

    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 docs から、関係メソッドを混乱させていると思います

class User extends Eloquent {

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

識別子my_foreign_keyは、phone テーブル内の外部キーの名前であり、ユーザー ID (関係の所有者) を参照します。だからあなたの場合

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

your_user_idは、所属するユーザーを参照するために deparments テーブルで使用するフィールドです。そして、あなたが提供した他の例でも

現在、所有者ではなく同じテーブルを参照するように外部キーを設定しています。

于 2012-11-27T01:29:42.407 に答える