使用attach()函数laravel将数据插入到多对多关系中的问题

时间:2018-10-31 19:51:44

标签: laravel laravel-5 laravel-4

我有两个表(订单和产品)和一个数据透视表(order_product)。 我已经使用以下代码建立了很多对很多的关系。

class Product extends Model{

   protected $fillable = ['name', 'price', 'is_iframe_product'];

   public function orders() {

      return $this->belongsToMany(Order::class);

   }   
}


class Order extends Model{

    public $guaded = ['id'];

    protected $fillable = ['is_iframe_order','price', 'status', 'address_id','user_id'];

    public function products () {

        return $this->belongsToMany(Product::class);

    }
}

我正在使用以下代码在CheckoutController.php中插入记录

 $Product = array('name' => $item['item_name'], "price" => $item['price'], "is_iframe_product" => "1");
 $saved = order()->products()->attach([$Product]);

但出现此错误:

  

例外:“ Symfony \ Component \ Debug \ Exception \ FatalThrowableError”   文件:“ C:\ wamp3 \ www \ jewellery \ jewellery \ app \ Http \ Controllers \ CheckoutController.php”   线:63   消息:“调用未定义函数App \ Http \ Controllers \ order()”

3 个答案:

答案 0 :(得分:0)

您正在使用一个函数:... = order()->...

错误提示该函数不存在:Call to undefined function ... order()

您是要引用这样的变量吗? ... = $order->...

(我看不到控制器的其余部分,所以我不知道您在使用什么变量)

答案 1 :(得分:0)

这是做什么:

  1. 首先将产品保存到数据库中

    $product = Product::create(array('name' => $item['item_name'], "price" =>$item['price'], "is_iframe_product" => "1"));

  2. 然后将保存的产品附加到产品的id

    $saved = $order->products()->attach($product->id);

答案 2 :(得分:0)

您需要做的是先创建订单:

$order = new Order;
// set some attributes
$order->save();

然后,您可以附加指定的产品:

$product = Product::find(1);

$order->products()->attach($product->getKey());

如果要动态创建产品:

$product = Product::create(array('name' => $item['item_name'], "price" =>$item['price'], "is_iframe_product" => "1"));

$order->products()->attach($product->getKey());