【问题标题】:How can I set value for extra field on Eloquent pivot table如何在 Eloquent 数据透视表上设置额外字段的值
【发布时间】:2014-06-26 08:29:55
【问题描述】:

$recourse->pivot->field = 'value';

报错:间接修改重载属性

【问题讨论】:

  • 显示代码,就可以了。
  • $product = Product::find($item->id); $order->pivot->price = '1.234'; $order->product()->save($product);

标签: laravel laravel-4 eloquent


【解决方案1】:

pivot 仅在关系上下文中可用:

// won't work
$model = Model::first();
$model->pivot; // null

// will work
$anotherModel = AnotherModel::first();
$relatedModel = $anotherModel->relation()->first();
$relatedModel->pivot; // Pivot object

但是对于您想要做的事情,只需在 save 方法中使用附加参数:

$product = Product::find($item->id);
$order->product()->save($product, ['price' => 12.34]);

对于现有关系:

$product = $order->product()->find($productId);
$product->pivot->price = 12.34;
$product->pivot->save();

// or
$order->product()->updateExistingPivot($productId, ['price'=>12.34]);

我建议你使用products 来表示这种关系,以便于阅读。

【讨论】:

    【解决方案2】:

    您应该 save() 枢轴本身。

    $order->pivot->price = '1.234';
    $order->pivot->save();
    

    【讨论】:

      【解决方案3】:

      对于 Laravel 5,您可能希望使用以下语法:

      
      $order->products()->attach($product, ['quantity' => 100]);
      
      

      其中quantity 是数据透视表的一个属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-29
        • 2018-01-18
        • 2023-04-06
        • 2013-05-09
        • 1970-01-01
        • 2019-08-20
        相关资源
        最近更新 更多