无法在 Laravel 上插入多个标签
Failed to insert multiple tags on Laravel
我想插入一个带有多个标签的 Post 记录,所以这是我在 Post@store 中的代码:
$post = Post::create(array(
'title' => $request->title,
'body' => $request->body,
'user_id' => Auth::id(),
));
if($post && $request->tags)
{
$tagNames = explode(',', $request->tags);
$tagIds = [];
foreach($tagNames as $tagName)
{
$tag = Tag::firstOrCreate(['name'=>$tagName]);
if($tag)
{
$tagIds[] = $tag->id;
}
}
$post->tags()->attach($tagIds);
}
但它给我一个错误 "Call to a member function attach() on null"
。当我签入 mysql 时,标签已经在那里,但我在 post_tag 表格中找不到任何条目。这是我的 post 模型:
class Post extends Model
{
protected $fillable = ['user_id','title','slug','body','tags','category_id','featured'];
public function category()
{
return $this->belongsTo('App\Category');
}
public function tags()
{
$this->hasMany('App\Tag');
}
}
您需要 return 在您的 Post
模型中调用 hasMany
。
public function tags()
{
return $this->hasMany('App\Tag');
}
更新
您应该使用 belongsToMany
而不是 hasMany
。
我想插入一个带有多个标签的 Post 记录,所以这是我在 Post@store 中的代码:
$post = Post::create(array(
'title' => $request->title,
'body' => $request->body,
'user_id' => Auth::id(),
));
if($post && $request->tags)
{
$tagNames = explode(',', $request->tags);
$tagIds = [];
foreach($tagNames as $tagName)
{
$tag = Tag::firstOrCreate(['name'=>$tagName]);
if($tag)
{
$tagIds[] = $tag->id;
}
}
$post->tags()->attach($tagIds);
}
但它给我一个错误 "Call to a member function attach() on null"
。当我签入 mysql 时,标签已经在那里,但我在 post_tag 表格中找不到任何条目。这是我的 post 模型:
class Post extends Model
{
protected $fillable = ['user_id','title','slug','body','tags','category_id','featured'];
public function category()
{
return $this->belongsTo('App\Category');
}
public function tags()
{
$this->hasMany('App\Tag');
}
}
您需要 return 在您的 Post
模型中调用 hasMany
。
public function tags()
{
return $this->hasMany('App\Tag');
}
更新
您应该使用 belongsToMany
而不是 hasMany
。