1. ホーム
  2. php

追加のピボットテーブルカラムの値を取得する laravel

2023-08-25 14:49:47

質問

phone_models、phone_problems、および phone_model_phone_problem のピボット・テーブルがあります。ピボット・テーブルには、追加の列 'price' があります。

PhoneModelです。

class PhoneModel extends \Eloquent
{
    public function problems()
    {
        return $this->belongsToMany('RL\Phones\Entities\PhoneProblem')->withPivot('price');
    }
}

PhoneProblemです。

class PhoneProblem extends \Eloquent
{
    public function models()
    {
        return $this->belongsToMany('PhoneModel')->withPivot('price');
    }
}

私がしようとしているのは、特定の問題を抱えた特定の携帯電話の価格を取得することです。

これは私が今持っている方法ですが、私はLaravelがもっとシンプルな方法でこれを行うために見つけることができないEloquentの機能を内蔵しているような気がします。

$model = $this->phoneService->getModelFromSlug($model_slug);
$problem = $this->phoneService->getProblemFromSlug($problem_slug);

は、特定のモデルと問題をそのスラッグから選択するだけです。

それから、私が行うことは、これらの資格情報を使って、このように価格を得ることです。

$row = DB::table('phone_model_phone_problem')
->where('phone_model_id', '=', $model->id)
->where('phone_problem', '=', $problem->id)
->first();

ということで、次のように価格を取得することができます。 $row->price しかし、これを行うにはもっと簡単で「Laravel」的な方法が必要だと感じています。

どのように解決するのですか?

EloquentでMany to Manyリレーションを使用する場合、結果のモデルには自動的に pivot 属性が割り当てられます。その属性を通じて、ピボット・テーブルの列にアクセスすることができます。 ただし、デフォルトでは、ピボット・オブジェクトにはキーしかありません。列もそこに含めるには、リレーションシップを定義するときに列を指定する必要があります。

return $this->belongsToMany('Role')->withPivot('foo', 'bar');

公式ドキュメント

Eloquentとの関係を設定する作業にもっと助けが必要な場合は、私に知らせてください。

Edit

価格を問い合わせるには、次のようにします。

$model->problems()->where('phone_problem', $problem->id)->first()->pivot->price