Laravel 関連モデルが存在するかどうかを確認する 質問する

Laravel 関連モデルが存在するかどうかを確認する 質問する

関連モデルを持つ Eloquent モデルがあります:

public function option() {
    return $this->hasOne('RepairOption', 'repair_item_id');
}

public function setOptionArrayAttribute($values)
{
    $this->option->update($values);
}

モデルを作成するときに、必ずしも関連するモデルがあるわけではありません。更新するときに、オプションを追加する場合もあれば、追加しない場合もあります。

したがって、関連するモデルが存在するかどうかを確認し、それぞれ更新するか作成する必要があります。

$model = RepairItem::find($id);
if (Input::has('option')) {
    if (<related_model_exists>) {
        $option = new RepairOption(Input::get('option'));
        $option->repairItem()->associate($model);
        $option->save();
        $model->fill(Input::except('option');
    } else {
       $model->update(Input::all());
    }
};

<related_model_exists>探しているコードはどこにありますか。

ベストアンサー1

php7.2以上リレーション オブジェクトでは使用できませんcount。そのため、すべてのリレーションに適した単一のメソッドはありません。代わりに、以下に示す @tremby のようなクエリ メソッドを使用します。

$model->relation()->exists()

すべての関係タイプに機能する汎用ソリューション(PHP 7.2以前):

if (count($model->relation))
{
  // exists
}

Model動的プロパティはまたは を返すため、これはすべての関係で機能しますCollection。どちらも を実装しますArrayAccess

つまり次のようになります:

単一の関係: hasOne/ belongsTo/ morphTo/morphOne

// no related model
$model->relation; // null
count($model->relation); // 0 evaluates to false

// there is one
$model->relation; // Eloquent Model
count($model->relation); // 1 evaluates to true

対多関係: hasMany/ belongsToMany/ morphMany/ morphToMany/morphedByMany

// no related collection
$model->relation; // Collection with 0 items evaluates to true
count($model->relation); // 0 evaluates to false

// there are related models
$model->relation; // Collection with 1 or more items, evaluates to true as well
count($model->relation); // int > 0 that evaluates to true

おすすめ記事