Php 在Laravel中保存数据并同时附加
我有一个博客应用程序,我需要在帖子上添加标签。我在数据库中有一个输入字段、post模型、tag模型和3个表:Php 在Laravel中保存数据并同时附加,php,html,mysql,laravel,input,Php,Html,Mysql,Laravel,Input,我有一个博客应用程序,我需要在帖子上添加标签。我在数据库中有一个输入字段、post模型、tag模型和3个表:posts、tags和tag\u post,具有许多关系 当我尝试在表上添加新标记时,它会发送到tag_post表而不是tag表。我确实试图改变我的模型和控制器,但情况更糟 后期模型 <?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { protect
posts
、tags
和tag\u post
,具有许多关系
当我尝试在表上添加新标记时,它会发送到tag_post表而不是tag表。我确实试图改变我的模型和控制器,但情况更糟
后期模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $filliable = ['PostTitle', 'post', 'slug'];
public function categories()
{
return $this->BelongsToMany('App\Categories', 'category_post');
}
public function tags()
{
return $this->BelongsToMany('App\Tag', 'tag_post');
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class Tag extends Model
{
protected $filliable = ['tag'];
public function posts()
{
return $this->BelongsToMany('App\Post', 'tags_post');
}
}
后置控制器
namespace App;
use Illuminate\Database\Eloquent\Model;
class Tag extends Model
{
protected $filliable = ['tag'];
public function posts()
{
return $this->BelongsToMany('App\Post', 'tags_post');
}
}
public function store(Request $request)
{
$post = new Post;
$post->user_id = auth::id();
$post->PostTitle = $request->PostTitle;
$post->post = $request->post;
$post->slug = $request->slug;
$post->status = '1';
$post->save();
$post->categories()->attach($request->categories);
$tags = new Tag;
foreach($tags as $tag){
$tags->tag = $request->tags;
if($tags->save()){
$post->tags()->attach($request->tags);
}
}
return redirect('blog')->with('messageSuccess', '¡Tu entrada se ha creado Exitosamente!');
}
表格
namespace App;
use Illuminate\Database\Eloquent\Model;
class Tag extends Model
{
protected $filliable = ['tag'];
public function posts()
{
return $this->BelongsToMany('App\Post', 'tags_post');
}
}
<div class="post-panel-3">
<div class="form-group">
<label for="postTags">Etiquetas: </label>
<input type="text" name="tags[]" value=" " class="form-control" placeholder="Etiquetas" id="tagBox">
</div>
Etiquetas:
我编辑了if语句,但在保存标记时出现了此错误类型错误:传递给Illumb\Database\Grammar::parameterize()的参数1必须是C:\laragon\www\asiviajo app\vendor\laravel\framework\src\Illumb\Database\Query\Grammars\Grammar.php第665行中调用的数组类型(给定字符串)
在将标签附加到帖子之前,请尝试保存标签 而不是:
...
if ($tag) {
// Do your stuff
}
这样做:
...
if ($tag->save()) {
// Do your stuff
}
这样,标记将保存在数据库的标记表中。之后,在if语句中,您将把post
附加到刚才保存的标记上
希望有帮助 在将标签附加到帖子之前,请尝试保存标签
而不是:
...
if ($tag) {
// Do your stuff
}
这样做:
...
if ($tag->save()) {
// Do your stuff
}
这样,标记将保存在数据库的标记表中。之后,在if语句中,您将把post
附加到刚才保存的标记上
希望有帮助 我更新了if语句,但现在保存时出错。您的foreach不正确。你应该在你的foreach中使用tag
而不是tags
;foreach($request->tags as$tags){$tag=tag::create(['tag'=>$tags]);if($tag->save()){$post->tags()->attach($tag->id);}}}}
,这样你的foreach就更有意义了!以后只需确保使用foreach中为项目设置的值,而不是项目本身。我更新了if语句,但现在保存时出错。foreach不正确。你应该在你的foreach中使用tag
而不是tags
;foreach($request->tags as$tags){$tag=tag::create(['tag'=>$tags]);if($tag->save()){$post->tags()->attach($tag->id);}}}}
,这样你的foreach就更有意义了!将来,只需确保使用foreach中为项目设置的值,而不是项目本身。