私は多対多の関係の文書化に取り組んでおり、ある種のレンガの壁にぶつかりました。既存のデータベース スキーマを使用して 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 を誤用しているのかはわかりません。
ありがとう!