Laravel 5.0获取附加后插入到数据透视表中的行的ID

时间:2019-05-09 13:53:43

标签: php laravel eloquent

我有一个通讯与通讯录模型,该模型具有多对多关系。当我将块附加到新闻稿时,我想要插入到数据透视表中的行的ID。

这是我尝试过的结果,但结果为“ null”

$newsletter = Newsletter::findOrFail($newsletterId);
$newsletterBlock = $newsletter->blocks()->attach($blockId);
dd($newsletterBlock);

3 个答案:

答案 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_idnewsletter_id来唯一标识该列,因为这种组合不会再出现了。