我目前正在使用save()
功能(doc),因此请将子项目保存到父级。但是,孩子已经附属于父母的情况不予处理。
所以我创造了这个:
//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');
}
}
答案 0 :(得分:0)
如果您尝试将一个模型附加到另一个模型,请使用attach()
方法而不是保存和ID而不是对象:
$parent->childs()->attach($child->id);
如果您尝试创建新对象,请使用findOrNew()
代替find()
:
$child = Task::findOrNew(request('child'));
如果该对象尚不存在,则该方法将创建一个新对象。
答案 1 :(得分:-1)
来自doc
$account = App\Account::find(10);
$user->account()->associate($account);
$user->save();