gpt4 book ai didi

php - Laravel save() 如果关系已经存在

转载 作者:行者123 更新时间:2023-12-02 05:16:17 24 4
gpt4 key购买 nike

我目前正在使用 save() 功能 ( doc ),因此将子项保存到父项。但是 child 已经附加到 parent 的情况没有得到处理。

所以我创建了这个:

//Validation stuff

$parent = Task::find( request('parent') );
$child = Task::find( request('child') );

if ( \DB::table('task_has_predecessors')
->where('child_id', request('child'))
->where('parent_id' , request('parent'))
->count() == 0 )
{
if ( $parent->childs()->save($child) )
{
flash('Link saved.');
}
else
{
flash()->error('Unable to create the link.');
}
}
else
{
flash()->warning('This link already exist.');
}

但我不是这个解决方案的忠实粉丝...有没有更好的方法可以在不使用 if (\DB::table('...')->where(.. .)->where(...)->count() == 0 )?

laravel 有管理这种行为的神奇方法吗?


我没有任何与 tasks_has_predecessors 表相关的模型。我的关系是这样的:

class Task extends Model
{
public function childs()
{
return $this->belongsToMany(ChecklistCategoryTask::class, 'task_has_predecessors', 'parent_id','child_id');
}

public function parents()
{
return $this->belongsToMany(ChecklistCategoryTask::class, 'task_has_predecessors' , 'child_id' , 'parent_id');
}
}

最佳答案

如果您尝试将一个模型附加到另一个模型,请使用 attach() 方法而不是保存和 ID 而不是对象:

$parent->childs()->attach($child->id);

如果您尝试创建一个新对象,请使用 findOrNew() 而不是 find():

$child = Task::findOrNew(request('child'));

如果对象不存在,此方法将创建一个新对象。

关于php - Laravel save() 如果关系已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48339901/

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