gpt4 book ai didi

php - Laravel 检查相关模型是否存在

转载 作者:IT老高 更新时间:2023-10-28 11:46:50 26 4
gpt4 key购买 nike

我有一个 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>是我要找的代码。

最佳答案

php 7.2+ 中,您不能在关系对象上使用 count,因此没有适用于所有关系的万能方法。改用查询方法,如下面提供的@tremby:

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

适用于所有关系类型的通用解决方案(pre php 7.2):

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

这适用于每个关系,因为动态属性返回 ModelCollection。两者都实现了 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

关于php - Laravel 检查相关模型是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23910553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com