Php Laravel雄辩地为帖子创建类别

Php Laravel雄辩地为帖子创建类别,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有3个表职位,类别和职位类别。该职位有两个类别,例如书籍(1)和杂志(2)。我创建了帖子并选择了两个类别的书籍和杂志我想保存帖子id和帖子类别表中的类别id我如何在不同的行中插入这两个类别,以及提交时如何获取帖子id?顺便说一句,我尝试将category_id作为数组添加到post表中,但我很难查询该类别的单个id 使用插入命令 $param = array( array('post_id' => '1', 'category_id' => 1),

我有3个表职位,类别和职位类别。该职位有两个类别,例如书籍(1)和杂志(2)。我创建了帖子并选择了两个类别的书籍和杂志我想保存帖子id和帖子类别表中的类别id我如何在不同的行中插入这两个类别,以及提交时如何获取帖子id?顺便说一句,我尝试将category_id作为数组添加到post表中,但我很难查询该类别的单个id

使用插入命令

$param = array(
        array('post_id' => '1', 'category_id' => 1),
        array('post_id' => '1', 'category_id' => 2),
);

DB::table('post')->insertGetId($param);
注意它忽略时间戳


如果您使用的是Eloquent,并且您已在模型上正确设置了关系,则可以在模型关系上使用
attach()
方法

跟进:

attach()
方法只会根据传递的参数在透视表上创建新记录,但不会创建相关模型的新实例

要实现这一点,您需要将模型传递给关系上的
save()
方法:

$post = Post::create(['title' => 'Hello World']);
$post->categories()->save(Category::create(['category' => 'Leaflets']));

感谢您澄清这一点

您的代码是通过查询生成器生成的,而不是雄辩的;-)你在写@trizz…:)。。。那么?如果我只选择了1个类别呢?您应该构建一个数组,并将其作为参数传递给insertGetId函数。这绝对是错误的。这是关于插入数据透视表,而不是帖子,即使如此,这也不是一个简单的解决方案。您是否在
Post
Category
模型上设置了关系?这两个表名都是
所提供的表名,因为它不符合约定(
category\u post
-字母顺序,单数),您的PostCategory表图片中似乎有小的打字错误,因为第一列中的id在两行中都不应该是1,但是1和2。是的,很抱歉,应该是2而不是1任何评论为什么这一条被否决?我多次阅读了这个问题,实际上我认为我理解得对。SE应该提供选项来查看谁投了反对票或赞成票,任何人都知道如何查看它可能是因为attach不会保存新实例化的模型,但您永远不知道。。然而,OP需要的是您的代码,所以这里是我的+。我建议在对关系调用
attach
之前,只添加
create
已保存的帖子。@deczo
可能是因为attach不会保存新实例化的模型
,您能给我解释一下吗?:)
attach()
将根据传递的参数插入新记录。为什么需要保存模型,或者你在这里指的是其他东西?感谢您提供的提示,我将添加您链接的
插入相关型号
,这是
附加
无法完成的。它要求相关模型“存在”,即在之前保存。含义:
$model=新模型([…])$父项->关系()->附加($model)将不起作用,但
$parent->relationship()->save($model)
将起作用。
$post = Post::create(['title' => 'Hello World']);
$post->categories()->save(Category::create(['category' => 'Leaflets']));
$post = new Post();
$post->title = 'Hello new post';
$post->save();
$category_ids = $input['category_id']; //html name in array 
$post_cat_data = array();
foreach($category_ids as $index => $value) {
    if (!empty($value)) {           
        $post_cat_data[] = [            
        'category_id' => $value,            
       ];
    }       
 }                  
$post->post_category()->createMany($post_cat_data);