我有一个具有相关模型的 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>我要找的代码在哪里。
<related_model_exists>
在 php 7.2+ 中 ,您不能count在关系对象上使用,因此没有适用于所有关系的万能方法。改用查询方法,如下面提供的@tremby:
count
$model->relation()->exists()
适用于所有关系类型的通用解决方案( php 7.2 之前 ):
if (count($model->relation)) { // exists }
这将适用于每个关系,因为动态属性返回Modelor Collection。两者都实施ArrayAccess。
Model
Collection
ArrayAccess
所以它是这样的:
单身 关系:hasOne///belongsTo``morphTo``morphOne
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
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