Laravel Eloquent:1対1と1対多の2つのモデル間の複数の関係

ソルフォランゴ

私はLaravelとEloquentの両方にまったく慣れておらず、基本が順調に進んでいる間、これを機能させるためにしばらくの間調査と試みを行っています。

ユーザーモデルとキャラクターモデル(World of Warcraftのプレイヤーが問題に関係している可能性があります)があります。ユーザーには多くのキャラクターがあり、キャラクターは1人のユーザーに属しています。

この関係に関する追加情報(このキャラクターがユーザーのメインキャラクターであるか、多くのTWINKキャラクターの1つであるか)を保存したいので、追加のフィールド(ロール)を使用してピボットテーブルを実装しようとしましたが、機能しません。

移行は次のとおりです。

Schema::create('users', function ($table) {
    $table->increments('id');
    $table->string('username')->unique();
    $table->timestamps();
});

Schema::create('characters', function($table)
{
    $table->increments('id');
    $table->timestamps();
    $table->string('name');
});

Schema::create('characters_users', function($table)
{
    $table->increments('id');
    $table->integer('user_id')->unsigned();
    $table->integer('character_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users');
    $table->foreign('character_id')->references('id')->on('characters');
    $table->string('type')->default('MAIN'); // can be 'MAIN' or 'TWINK'
});

ではキャラクターモデル、私は次のように定義しています:

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

では、ユーザーモデル、私は次のように定義しています:

public function main() 
{
    return $this->hasOne('Character', 'characters_users.character_id', 'id')->where('characters_users.role', '=', 'MAIN');
}

public function twinks()
{
    return $this->hasMany('Character', 'characters_users.character_id', 'id')->where('characters_users.role', '=', 'TWINK');
}

ここで、関係の例を設定しようとしています。ユーザーとキャラクターの両方を取得し、次のように言いたいと思います。これはこのユーザーのメインキャラクターです。

$user = User::find(1)->first();

$char = Character::whereName('Bruise')->first();

// assign this char as main to the user
$user->main()->save($char);

エラーメッセージは次のとおりです。

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'character_id' in 'field list' (SQL: update `characters` set `updated_at` = 2014-09-05 12:30:58, `character_id` = 1 where `id` = 47)

なぜなら-もちろん、それは1対1の関係です-ピボットテーブルではなく、キャラクターrespのテーブルで更新する対応するフィールドをEloquentが検索します。ユーザー。

達成したいこと

  • ユーザーに対してキャラクターをMAINとして設定する
  • ユーザーにTWINKとして文字を設定する
  • 「ユーザーのメインキャラクターは何ですか、彼/彼女のイケメンキャラクターは何ですか?」

ピボットテーブルを使用する代わりに、これを行うためのより良い、よりスマートな方法はありますか?この問題では完全に軌道から外れていますか?

SkarXa

文字テーブルに列の役割を追加する

    Schema::table('characters', function($table)
{
    $table->tinyInteger('role')->unsigned()->nullable()->default(0);
});

文字を挿入するとき、メインの場合は1に設定し、イケメンの場合は0のままにします。後でユーザーからメインまたはイケメンを取得する場合は、$ user-> mainまたは$ user-> twinksを使用します。

//model User

public function main() 
{
    return $this->hasMany('Character')->where('role', '=', 1);
}

public function twinks()
{
    return $this->hasMany('Character')->where('role', '=', 0);
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Laravel、複数のモデル間の多対多の関係

分類Dev

Laravel、複数のモデルとの多対多の関係

分類Dev

Laravel Eloquent3つのモデル間の多対多の関係

分類Dev

Laravel Eloquent ORM 1対多の関係、2つのテーブルから選択

分類Dev

多対多のLaravel複数の中間テーブルとのEloquent関係

分類Dev

複数の1対1の関係laravel

分類Dev

Laravelの多対1関係

分類Dev

ユーザー間モデル:Laravelでの1対多の関係

分類Dev

モデルとの1対1の関係を更新するlaravel

分類Dev

1対多の関係-LaravelとMysql

分類Dev

Laravel多対多の関係または1対多の関係

分類Dev

Laravelの1対多のモデル関係が機能しない

分類Dev

Laravelの3つのテーブルのEloquentモデルで多対多の関係とともに1対多を定義するにはどうすればよいですか?

分類Dev

Laravelの1対多の関係

分類Dev

Laravel5.5の1対多の関係

分類Dev

Laravelの1対多の関係

分類Dev

Laravelの1対多の関係

分類Dev

Laravelの1対多の関係

分類Dev

Laravelの1対多の関係

分類Dev

Laravel 5.2Eloquent-多対多の関係によるモデル

分類Dev

Laravel / Eloquent-morphToMany関係を持つ多対多のピボットモデル

分類Dev

1対多および1対多の関係1laravel

分類Dev

Laravel5.6-1対多の関係

分類Dev

Laravelが1対多の関係を取得

分類Dev

Laravelと1対1の関係

分類Dev

1対多そして1対多の関係laravel

分類Dev

Laravel関係:複数のlocalKey関係に対して1つのforeignKey

分類Dev

Laravelの雄弁な1対多対1の関係

分類Dev

Laravel:1対1の関係は1対多の関係になります

Related 関連記事

ホットタグ

アーカイブ