Laravel - 在attach()和detach()之后检查查询执行

After I execute this

$shop->articles()->attach($article_id);

or this

$shop->articles()->detach($article_id);

how do I make sure they actually get executed? In the first case it returns void, but also it saves automatically so I cannot use the save function to check it. In the second case it returns int, but what does it represent?

dongwo1234
dongwo1234 如何编写一些测试......检查您正在寻找的行为是否已完成
接近 4 年之前 回复
douqian6194
douqian6194 那么你的选择非常有限。github.com/laravel/framework/blob/5.3/src/Illuminate/Database/...
接近 4 年之前 回复
donglv6747
donglv6747 我想到了这一点,但更优先考虑一些更严格的检查。
接近 4 年之前 回复
dongzaliang4492
dongzaliang4492 附加不返回任何东西。我相信如果插入失败会抛出异常,所以如果没有异常,你可以认为它有效。
接近 4 年之前 回复
dopnpoh056622
dopnpoh056622 谢谢。所以如果它只是一个查询是一个。附件怎么样?
接近 4 年之前 回复
duanfei8897
duanfei8897 detach返回分离项的数量。
接近 4 年之前 回复
douxiaqin2062
douxiaqin2062 它表示受影响的行数
接近 4 年之前 回复

1个回答

You do it with try/catch and DB::transaction/commit/rollback.

try{
    \DB::transaction(function() use($shop, $article_id) {
        $shop->articles()->attach($article_id);
    });

    \DB::commit();
} catch (\Exception $e) {
    \DB::rollback();

    return redirect()->back()->withErrors(collect($e->getMessage()));
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问