0

私は多対多の関係の文書化に取り組んでおり、ある種のレンガの壁にぶつかりました。既存のデータベース スキーマを使用して Laravel/Eloquent をラップしようとしていますが、これにはさまざまな外部キー フィールドについて Eloquent に教える必要があります。以下は、私の 2 つのモデルと、クエリの出力を表示する DB::profile() の結果です。クエリは正常に作成されますが、UserID はバインドされていないことに注意してください。

私のコードでは、モデルを User::find(1)->roles として呼び出しています。その特定のユーザーの役割の配列を取得することを期待していますが、空です。

ユーザーモデル

class User extends Eloquent
{
   public static $table = 'GDN_User';
   public static $key = 'UserID';
   public function roles()
   {
      return $this->has_many_and_belongs_to('role', 'GDN_UserRole', 'UserID', 'RoleID');
   }
}

ロールモデル

class Role extends Eloquent
{
   public static $table = 'GDN_Role';
   public static $key = 'RoleID';
   public function users()
   {
      return $this->has_many_and_belongs_to('user', 'GDN_UserRole', 'RoleID', 'UserID');
   }
}

DB::profile() 出力

array(2) {
  [0]=>
  array(3) {
    ["sql"]=>
    string(51) "SELECT * FROM `GDN_User` WHERE `UserID` = ? LIMIT 1"
    ["bindings"]=>
    array(1) {
      [0]=>
      int(1)
    }
    ["time"]=>
    string(4) "4.04"
  }
  [1]=>
  array(3) {
    ["sql"]=>
    string(367) "SELECT `GDN_Role`.*, `GDN_UserRole`.`id` AS `pivot_id`, `GDN_UserRole`.`created_at` AS `pivot_created_at`, `GDN_UserRole`.`updated_at` AS `pivot_updated_at`, `GDN_UserRole`.`UserID` AS `pivot_UserID`, `GDN_UserRole`.`RoleID` AS `pivot_RoleID` FROM `GDN_Role` INNER JOIN `GDN_UserRole` ON `GDN_Role`.`RoleID` = `GDN_UserRole`.`RoleID` WHERE `GDN_UserRole`.`UserID` = ?"
    ["bindings"]=>
    array(1) {
      [0]=>
      NULL
    }
    ["time"]=>
    string(4) "0.10"
  }
}

結果のクエリは良好です。これをサーバーで直接実行すると、UserID = 1 に対して 2 つのグループが返されます。バインドは行われておらず、これがバグなのか、Eloquent を誤用しているのかはわかりません。

ありがとう!

4

1 に答える 1

1

Laravelはしばしばキーを小文字にします。UserIDモデル内のすべてのインスタンスを小文字にしRoleIDて、そこから作業することをお勧めします。

Laravelで使用するデータベースを設計している場合は、小文字のテーブル名と列名を使用することを目的としています(既存のデータベースを使用している場合は、オプションがない可能性があります)。

--PhillSparks

于 2013-02-18T14:35:16.077 に答える