我有一个通讯与通讯录模型,该模型具有多对多关系。当我将块附加到新闻稿时,我想要插入到数据透视表中的行的ID。
这是我尝试过的结果,但结果为“ null”
$newsletter = Newsletter::findOrFail($newsletterId);
$newsletterBlock = $newsletter->blocks()->attach($blockId);
dd($newsletterBlock);
答案 0 :(得分:1)
尽管这个问题很旧,但是没有人给出正确的答案。如果您的数据透视表具有主键,请执行以下操作。
如果要在加载相关模型时获取ID,请使用withPivot
方法。但是,当您附加某些内容时,您将无法获得pivot_id。
在这种情况下,最好的办法是使用连接到数据透视表的模型,然后只需要做的就是使用其模型插入数据透视表,而不是将两个模型连接在一起。
在此示例中,如果有必要填充模型的BlockNewsLetter
和$table
属性,请首先创建一个名为$fillable
的模型,然后再进行操作。
$newsletter = Newsletter::findOrFail($newsletterId);
$blockNewsLetterPivot = BlockNewsLetter::updateOrCreate([
'block_id' => $block_id ,
'newsLetter_id' => $newsletter->id
]);
$inserted_pivot_id = $blockNewsLetterPivot->id;
答案 1 :(得分:0)
尝试一下,还没有测试,但这应该可行:
/** Newsletter.php */
public function blocks()
{
return $this->belongsToMany('App\Block')
->withPivot('id');
}
然后在您的控制器中:
$newsletter = Newsletter::findOrFail($newsletterId);
$newsletter->blocks()->attach($blockId);
// then you could:
foreach($newsletter->blocks as $block)
{
dd($block->pivot->id);
}
检查文档的this section。
答案 2 :(得分:0)
我在这里可能走错了路,但是:
DB::table('your_pivot_table')
->select('id')
->where('block_id', $blockId)
->where('newsletter_id', $newsletterId)
->first();
但是我仍然不明白为什么您需要id
列。您可以通过它们的block_id
和newsletter_id
来唯一标识该列,因为这种组合不会再出现了。