为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel eloquent 使用关系列更新列

Laravel eloquent 使用关系列更新列

浮云间 2023-09-08 21:55:21
怎么才能实现这个查询呢?Sale::with(['catalog'])    ->whereIn('id', $ids)    ->update(['price' => DB::raw('catalog.price')]);这不起作用,它显示未定义的表...我尝试输入表的名称,但它是相同的。在互联网上我总是找到简单的查询:Sale::with(['catalog'])    ->whereIn('id', $ids)    ->update(['price' => 5]);好的!当我想要更新具有相同值的所有行时很容易,此外当您想要使用同一个表的列进行更新时也很容易,例如:Sale::with(['catalog'])    ->whereIn('id', $ids)    ->update(['price' => DB::raw('price_alternative')]);但是如何使用另一个具有关系的表的列呢?我还没有找到解决方案。我知道这可以使用整个原始查询来解决,但我想知道是否可以通过雄辩的方式来实现
查看完整描述

2 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您可能需要加入catalog查询构建器上的表。这与使用不同with()。类似的东西

Sale::whereIn('id', $ids)
    ->join('catalog', 'sales.catalog_id', '=', 'catalog.id')
    ->update(['price' => DB::raw('catalog.price')]);


查看完整回答
反对 回复 2023-09-08
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

这并不比@Qirel 的答案更好,但这是雄辩的方式,我喜欢这个,因为这更清楚。


$Sales = Sale::whereIn('sales.id', $ids)

    ->with('Cat')->get();


$Sales->map(function($q){

    $q->price = $q->Cat->price;

    $q->save();

});

假设您在销售模型中有以下关系代码:


public function Cat()

{

    return $this->hasOne(CatModel::class, 'id', 'catalog_id');

}


查看完整回答
反对 回复 2023-09-08
  • 2 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信