【问题标题】:Updating One to many relation in laravel 5.3在 laravel 5.3 中更新一对多关系
【发布时间】:2017-03-30 05:31:25
【问题描述】:

我想更新一对多关系。例如,我有一个名为 Product

的模型
class Product extends Model
{
    protected $primaryKey = 'product_id';
    public $timestamps = FALSE;

    public function Size(){
        return $this->hasMany('App\Size');
    }

}

还有一个模型叫做Size

class Size extends Model
{
    public $timestamps = FALSE;
    protected $fillable = ['product_id','size'];

    public function Product(){
        return $this->belongsTo('App\Product');
    }

这是我的控制器:

public function update(Request $request){
    for($i = 1; $i <= $sizeCounter; $i++){
        $selectedSize = "size_$i";

        if($request->$selectedSize){
            $array = ['size'=> $request->$selectedSize];
        }
    }

    $Size = Size::where('product_id' , $request->id)->update($array);
}

但是它正在做什么将具有所选产品ID的所有尺寸记录更新为最后一个输入器尺寸。我想用选择的不同尺寸而不是最后选择的尺寸更新所有尺寸

如何更新特定产品的尺寸。像多对多关系的同步方法一样,有什么方法可以更新记录。

【问题讨论】:

    标签: php eloquent laravel-5.3 one-to-many updating


    【解决方案1】:

    您在循环中覆盖您的$array。在 for 循环之后,$array 可能是最后一个大小。

    一般来说,您的查询是正确的,但它与执行地点有关。应该是这样的:

    if (isset($request->$selectedSize)) { // or is_int() ?
        $Size = Size::where('product_id', $request->id)->update(['size'=> $request->$selectedSize]);
    }
    

    【讨论】:

    • 哦,对不起,我刚刚在上一个版本中这样做了,覆盖了数组,但这里没有更正。但我已经解决了一些方法。感谢您的赞赏。希望我能从你那里得到更多的帮助。 :)
    • 有什么办法可以用新选择的项目更新表格并自动删除旧的。假设我有 S.M,L 我想用尺寸 M,L 更新,所以我需要从表中删除 S 尺寸条目。
    • 我想你想删除productsize之间的关系?在这种情况下,您可以使用 detach()sync()
    • 它的 sync() 给了我 BadMethodeCallException
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 2018-09-26
    • 2017-02-22
    • 1970-01-01
    • 2018-01-28
    • 2017-05-12
    相关资源
    最近更新 更多