Php 如何更新Laravel有许多关系模型?

Php 如何更新Laravel有许多关系模型?,php,laravel,laravel-5.2,laravel-5.3,Php,Laravel,Laravel 5.2,Laravel 5.3,我一直想弄清楚如何更新我的hasMany关系模型。我可以很容易地创建新的关系,但当我尝试更新我的关系模型时,它不起作用?laravel push()方法仍然有效吗?有人能帮忙吗?例如,我想在我的控制器中更新与我的产品表相关的分类表。我在下面有一段代码片段:: Product.php class Product extends Model { protected $fillable = [ 'product_category', 'product_subcategory',

我一直想弄清楚如何更新我的hasMany关系模型。我可以很容易地创建新的关系,但当我尝试更新我的关系模型时,它不起作用?laravel push()方法仍然有效吗?有人能帮忙吗?例如,我想在我的控制器中更新与我的产品表相关的分类表。我在下面有一段代码片段::

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');
    }
}
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);
    }
}
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();
    }
}
Taxonomies.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');
    }
}
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);
    }
}
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();
    }
}
EditProductController.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');
    }
}
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);
    }
}
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(),我的分类表更新正确。

我认为您还没有完全理解Laravel雄辩的关系的工作方式。首先,您需要在两个模型中定义关系。。您的分类模型具有此功能,但您的产品模型应具有:

公共功能分类法()
{
返回$this->hasMany('App\Taxonomies','product_id','product_id');
}


然后要更新一个产品的分类法,你会有这样的想法……呃,我不确定你在这里想要实现什么,特别是你链接
产品_子类别的方式,所以我不能正确地说,但是请看

@Ross Wilson,非常感谢你为我缩进了它!!!!一个产品应该有一个分类法还是可以有更多分类法?@Ross Wilson,一个产品可以有多个分类法OK,那么您如何知道要编辑哪个分类法?或者你想更新所有这些吗?@Ross Wilson,我正在为父表(product)使用product_id,在我的分类表中,我也有一个product_id。我想用这个唯一的product_id编辑匹配的分类表列(product_category)仅供参考,但您实际上不需要在两个模型中定义关系:)如果您从未调用反向(本例中为Product::with('taxonomies'),则不需要定义它。它都与您实际使用的模型相关。当您在一个模型中定义一个关系时,您为它提供了它所需要的所有信息,即与该模型的关系是什么,用什么类来发布信息(以及获取表名),以及它应该为查询使用什么键。当您要使用另一个类加载关系时,只需定义反向。