関連モデルを持つ 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