如何在 Laravel Eloquent 中插入具有多个 belongsTo 关系的记录
How to insert record with many belongsTo relations in Laravel Eloquent
我正在尝试以 Eloquent 方式插入记录。
基本情况下是清楚的。例如,如果我有一个包含 Post 的博客,并且每个 post 属于一个用户,我可以这样做:
$post = new Post;
$post->content = 'Post content';
$user->posts()->save($post);
但是如果我的Post同时属于User、Category和Group,我该怎么办呢?
我的第一个想法是这样做:
$post = new Post;
$post->content = 'Post content';
$user->posts()->save($post);
$group->posts()->associate($post);
$cat->posts()->associate($post);
但是不行,因为我存到数据库的时候group id和category id都是空的,不允许。
我现在做的是:
$post = new Post;
$post->content = 'Post content';
$post->group = $group->id;
$post->category = $cat->id;
$user->posts()->save($post);
但我认为这不是正确的方法。
有人能给我指出正确的方向吗?
您使用 associate
的方式不对。您必须在 belongsTo
关系端调用它而不是 hasMany
.
试试这个:
$post = new Post;
$post->content = 'Post content';
$post->category()->associate($cat);
$post->group()->associate($group);
$user->posts()->save($post);
我正在尝试以 Eloquent 方式插入记录。
基本情况下是清楚的。例如,如果我有一个包含 Post 的博客,并且每个 post 属于一个用户,我可以这样做:
$post = new Post;
$post->content = 'Post content';
$user->posts()->save($post);
但是如果我的Post同时属于User、Category和Group,我该怎么办呢?
我的第一个想法是这样做:
$post = new Post;
$post->content = 'Post content';
$user->posts()->save($post);
$group->posts()->associate($post);
$cat->posts()->associate($post);
但是不行,因为我存到数据库的时候group id和category id都是空的,不允许。
我现在做的是:
$post = new Post;
$post->content = 'Post content';
$post->group = $group->id;
$post->category = $cat->id;
$user->posts()->save($post);
但我认为这不是正确的方法。
有人能给我指出正确的方向吗?
您使用 associate
的方式不对。您必须在 belongsTo
关系端调用它而不是 hasMany
.
试试这个:
$post = new Post;
$post->content = 'Post content';
$post->category()->associate($cat);
$post->group()->associate($group);
$user->posts()->save($post);