【问题标题】:How To Update Laravel hasMany Relationship Models?如何更新 Laravel hasMany 关系模型?
【发布时间】:2017-05-17 21:36:00
【问题描述】:

我一直在努力思考如何更新我的 hasMany 关系模型。我可以轻松地创建新的关系,但是当我尝试更新我的关系模型时它不起作用? laravel push() 方法仍然有效吗?有人可以帮忙吗?例如,我想更新与控制器中的产品表相关的分类表。我在下面有一个代码 sn-p::

Product.php

class Product extends Model
{
    protected $fillable = [
        'product_category', 'product_subcategory', 'product_name', 
        'product_price', 'product_id', 'product_description', 'product_image'
    ];

    protected $primaryKey = 'product_id';

    public $incrementing = false;

    public function addTaxonomiesToProduct()
    {
        return $this->hasOne('App\Taxonomies', 'product_id', 'product_id');
    }
}

Taxonomies.php

class Taxonomies extends Model
{
    protected $fillable = ['product_category', 'product_subcategory'];

    protected $primaryKey = 'product_id'; // or null

    public $incrementing = false;

    public function product()
    {
        return $this->belongsTo(Product::class);
    }
}

EditProductController.php

class EditProductController extends Controller
{
    public function update(Request $request, Product $product)
    {

          $product_size = array();
          foreach ($request->product_size as $key => $value) 
           {
              array_push($product_size,$value);

           }
        $product->update([
            'product_name'        => $request->product_name,
            'product_price'       => $request->product_price,
            'product_description' => $request->product_description,
            'product_size'        => serialize($product_size),
            'product_image'       => $product_image_path,
        ]);

        /**
         * Go the products table,
         * Get the product based off its product_id,
         * and then update this products taxonomy
         **/
        $taxonomies = Product::find($product->product_id);
        $taxonomies->addTaxonomiesToProduct->product_subcategory = "Mens Shoes";

        $taxonomies->push();
    }
}

****更新问题已解决**** 通过将 Products 表中的 hasMany() 更改为 hasOne(),我的分类表已正确更新。

【问题讨论】:

  • @Ross Wilson,非常感谢你帮我缩进!!!
  • 一个产品是有一个Taxonomies还是可以有更多?
  • @Ross Wilson,一个产品可以有多个分类法
  • 好的,那么你怎么知道你想编辑哪个Taxonomies?还是要全部更新?
  • @Ross Wilson,我正在使用 product_id 作为父表(产品),在我的分类表中我也有一个 product_id。使用这个独特的 product_id,我想编辑匹配的分类列 (product_category)

标签: php laravel laravel-5.2 laravel-5.3


【解决方案1】:

我认为你并不完全理解 Laravel Eloquent 关系的运作方式。首先,您需要在 both 模型中定义关系。您的分类模型有这个,但您的产品模型应该有: public function taxonomies() { return $this->hasMany('App\Taxonomies', 'product_id', 'product_id'); }

然后要更新产品的分类法,你会得到类似...呃,我不确定你在这里想要实现什么,尤其是你链接 product_subcategory 的方式,所以我可以'说得对,但请看the documentation

【讨论】:

  • 仅供参考,但您实际上不需要在两个模型中定义关系:)
  • 如果您从不调用逆向函数(在这种情况下为 Product::with('taxonomies')),则无需定义它。
  • 都和你实际使用的机型有关。当您在一个模型中定义关系时,您将为其提供所需的所有信息,即与该模型的关系是什么,使用什么类填充信息(以及获取表名)以及它应该使用哪些键用于查询。当您要使用其他类来加载关系时,您只需要定义逆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2019-06-06
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
相关资源
最近更新 更多