私は単純なユーザー管理システムを作成しようとしましたが、リレーションの照会に関しては、障害物にぶつかり続けています。たとえば、sersとrolesがあり、すべてのユーザーとそのロールに対してクエリを実行しようとすると、エラーが発生します。タイトルの1つは、私が遭遇した最新のものです。
ユーザーとロールモデルは次のようになります。
class Role extends Model
{
public function users()
{
$this->belongsToMany('\App\User', 'fk_role_user', 'role_id', 'user_id');
}
}
class User extends Model
{
public function roles()
{
$this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id');
}
}
2つの間の多対多の関係の移行テーブルは次のようになります。
public function up()
{
Schema::create('role_user', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned()->nullable(); //fk => users
$table->integer('role_id')->unsigned()->nullable(); //fk => roles
$table->foreign('fk_user_role')->references('id')->on('users')->onDelete('cascade');
$table->foreign('fk_role_user')->references('id')->on('roles')->onDelete('cascade');
});
}
そして、私はコントローラーでそれらの関係を持つすべてのレコードを取得しようとします:
public function index()
{
$users = User::with('roles')->get();
return $users;
}
それで、私はここで何が欠けているのかを教えてくれる別の目が必要ですか?
リレーションを定義するメソッドにreturnステートメントがありません。関係定義を返す必要があります。
交換
public function roles()
{
$this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id');
}
と
public function roles()
{
return $this->belongsToMany('\App\Role', 'role_user', 'user_id', 'role_id');
}