如何关联创建数据? laravel eloquent
How to create a data associatively? laravel eloquent
我有一个Post型号:
class Post extends Model
{
protected $fillable = [
'title',
'user_id',
'token',
'body'
];
public function favorites()
{
return $this->hasMany(Favorite::class);
}
public function addFavorite($state = 1)
{
$this->favorites()->create(compact('state'));
}
}
最喜欢的模特:
class Favorite extends Model
{
protected $fillable = ['user_id', 'post_id', 'state'];
}
当我在 tinker 中测试时:
$post = Post::first();
$post->addFavorite();
它 returns 给我一个错误:
Illuminate/Database/QueryException with message 'SQLSTATE[HYOOO]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into favorites...
为什么在 post 中给出了 user_id
?问题是我是否必须输入 user_id
才能实现此目的?
由于 Favorite
模型与 Post
模型相关并且您通过 relation()->create()
创建它,您可以跳过指定 post_id
因为 Laravel 可以推断它.但是您必须指定 user_id
,因为您的代码无法知道 favourite.user_id
和 post.user_id
是相同的。所以简而言之:是的,你必须指定 user_id。
是否需要 user_id
的问题由您决定。以后会不会派上用场?将它放在 posts table 上就足够了吗?
它正在询问 user_id
,因为您在收藏夹 table 中的那个字段上没有默认值字段。您可以设置一个默认值,将其从 table 中删除(如果您决定不需要它),或者在通过关系创建时提供它:
class Post extends Model
{
protected $fillable = [
'title',
'user_id',
'token',
'body'
];
public function addFavorite($state = 1)
{
$this->favorites()->create([
'state' => $state,
'user_id' => $this->user_id,
]);
}
public function removeFavorite()
{
$this->addFavorite(0);
}
}
不要忘记在 Post 模型中包含 favorites
的关系定义。
根据复数名称,似乎post有很多收藏夹,但是你的removeFavorite()方法调用了addFavorite方法??这实际上不会删除任何东西 - 它会创建一个新记录。
我有一个Post型号:
class Post extends Model
{
protected $fillable = [
'title',
'user_id',
'token',
'body'
];
public function favorites()
{
return $this->hasMany(Favorite::class);
}
public function addFavorite($state = 1)
{
$this->favorites()->create(compact('state'));
}
}
最喜欢的模特:
class Favorite extends Model
{
protected $fillable = ['user_id', 'post_id', 'state'];
}
当我在 tinker 中测试时:
$post = Post::first();
$post->addFavorite();
它 returns 给我一个错误:
Illuminate/Database/QueryException with message 'SQLSTATE[HYOOO]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into favorites...
为什么在 post 中给出了 user_id
?问题是我是否必须输入 user_id
才能实现此目的?
由于 Favorite
模型与 Post
模型相关并且您通过 relation()->create()
创建它,您可以跳过指定 post_id
因为 Laravel 可以推断它.但是您必须指定 user_id
,因为您的代码无法知道 favourite.user_id
和 post.user_id
是相同的。所以简而言之:是的,你必须指定 user_id。
是否需要 user_id
的问题由您决定。以后会不会派上用场?将它放在 posts table 上就足够了吗?
它正在询问 user_id
,因为您在收藏夹 table 中的那个字段上没有默认值字段。您可以设置一个默认值,将其从 table 中删除(如果您决定不需要它),或者在通过关系创建时提供它:
class Post extends Model
{
protected $fillable = [
'title',
'user_id',
'token',
'body'
];
public function addFavorite($state = 1)
{
$this->favorites()->create([
'state' => $state,
'user_id' => $this->user_id,
]);
}
public function removeFavorite()
{
$this->addFavorite(0);
}
}
不要忘记在 Post 模型中包含 favorites
的关系定义。
根据复数名称,似乎post有很多收藏夹,但是你的removeFavorite()方法调用了addFavorite方法??这实际上不会删除任何东西 - 它会创建一个新记录。