更新 laravel 关系中的许多记录

Posted

技术标签:

【中文标题】更新 laravel 关系中的许多记录【英文标题】:Update many records in a laravel relationship 【发布时间】:2014-06-18 17:25:34 【问题描述】:

我尝试在 Laravel 中使用 4 个表,但我不知道如何使用 eloquent 执行特定查询。我想更新属于某个用户(通过 product_id)且payout_id 为空的所有订单。

此原始 sql 语句有效,但我不确定如何为此使用 eloquent..也许是 sync?

UPDATE order_items i JOIN products p on (i.product_id = p.id)  SET i.payout_id = null where p.user_id = 3

用户模型

产品型号 FK: user_id

订单模式 FK:product_id FK:payout_id

支付模式

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

您需要为表ip 创建模型,有关模型创建的完整信息,请参阅http://laravel.com/docs/eloquent。

i 的模型中,您将创建与p 的关系:

 public function p()
 
     return $this->('p','id','product_id');
 

然后您可以按如下方式运行查询:

$results = i::with('p')
->where('user_id', '=', 3)
->update(array('payout_id' => null));

【讨论】:

感谢您的建议!不幸的是,这给了我 Column not found: 1054 Unknown column 'user_id' in 'where clause' (SQL: update order_items set payout_id = 8, updated_at = 2014-05-02 15:52:21 where @987654331 @ = 3 和 payout_id 为空) 抱歉弄混了,有点错别字,怎么样。【参考方案2】:
First define a function orders in User Model
    public function orders()
    
        return $this->hasManyThrough('Orders', 'Product','user_id','product_id');
         



    User::where('id','=',$userid)->with(array('orders'=>function($query)
        $query->where('payout_id','=',0)->update(array('payout_id'=>$updatevalue));
    ))->first();

【讨论】:

谢谢!这似乎应该有效,但我可能会遗漏一些东西。 $payout_id = $payout->id; User::where('id','=',$user_id)->with(array('orderItems'=>function($query) $query->where('payout_id',NULL)->update(array('payout_id'=>$payout_id)); ))->first(); 给我未定义的变量 $payout_id?范围问题?如果我用静态值 (11) 替换变量,我会得到`完整性约束违规:字段列表中的 1052 列 'updated_at' 不明确

以上是关于更新 laravel 关系中的许多记录的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 有许多之一

Laravel Eloquent - 保存/更新相关的一对多关系数据

我想自学laraver,请诸位前辈给一些建议,谢谢

无法删除一对多关系中的记录 laravel eloquent

laravel环境配置过程记录

Laravel 5.5 检索嵌套关系中的第一条记录