我有一个口才的模型,其中有一个相关的模型:
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 }
由于动态属性返回Model或,因此这将适用于每个关系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