Laravel 推送一对一关系
Laravel push a one-to-one relation
我的产品与其对应的价格是一对一的关系。我想做的是,当我创建新产品时,新产品存储在 "products" table 中,但价格也保存在 "prices" table,包括 "products_id"。这是我现在拥有的:
产品型号:
class Products extends Eloquent {
public function prices()
{
return $this->hasOne('Prices');
}
}
价格模型:
class Prices extends Eloquent {
public function products()
{
return $this->belongsTo('Products');
}
}
控制器存储方法:
$product = new Products;
$product->name = Input::get('name');
$product->prices->price = Input::get('price');
$product->push();
不过我收到一个错误:
间接修改重载属性 Products::$prices 无效
dd 我的 $product:
object(Products)#606 (20) {
["fillable":protected]=> array(3) {
[0]=> string(4) "name"
[1]=> string(8) "selected"
[2]=> string(6) "number"
}
["connection":protected]=> NULL
["table":protected]=> NULL
["primaryKey":protected]=> string(2) "id"
["perPage":protected]=> int(15)
["incrementing"]=> bool(true)
["timestamps"]=> bool(true)
["attributes":protected]=> array(0) { }
["original":protected]=> array(0) { }
["relations":protected]=> array(0) { }
["hidden":protected]=> array(0) { }
["visible":protected]=> array(0) { }
["appends":protected]=> array(0) { }
["guarded":protected]=> array(1) {
[0]=> string(1) "*"
}
["dates":protected]=> array(0) { }
["touches":protected]=> array(0) { }
["observables":protected]=> array(0) { }
["with":protected]=> array(0) { }
["morphClass":protected]=> NULL
["exists"]=> bool(false)
}
现在使用正确的命名约定和以下代码修复了它:
$product = new Product;
$product->name = Input::get('product');
$product->category_id = Input::get('category');
$product->save();
$price = new Price;
$price->price = Input::get('price');
$price->save();
$product->price()->save($price);
在这里找到答案:
laravel: eloquent example insert data to database
更新数据及其关系时可以使用推送,但第一次创建时必须先保存产品再保存价格。
$product = new Products();
$product->name = 'pro2';
$product->save();
$price=new Prices();
$price->price=3;
$product->prices()->save($price);
此外,您应该使用事务来使数据处于一致状态。
我的产品与其对应的价格是一对一的关系。我想做的是,当我创建新产品时,新产品存储在 "products" table 中,但价格也保存在 "prices" table,包括 "products_id"。这是我现在拥有的:
产品型号:
class Products extends Eloquent {
public function prices()
{
return $this->hasOne('Prices');
}
}
价格模型:
class Prices extends Eloquent {
public function products()
{
return $this->belongsTo('Products');
}
}
控制器存储方法:
$product = new Products;
$product->name = Input::get('name');
$product->prices->price = Input::get('price');
$product->push();
不过我收到一个错误:
间接修改重载属性 Products::$prices 无效
dd 我的 $product:
object(Products)#606 (20) {
["fillable":protected]=> array(3) {
[0]=> string(4) "name"
[1]=> string(8) "selected"
[2]=> string(6) "number"
}
["connection":protected]=> NULL
["table":protected]=> NULL
["primaryKey":protected]=> string(2) "id"
["perPage":protected]=> int(15)
["incrementing"]=> bool(true)
["timestamps"]=> bool(true)
["attributes":protected]=> array(0) { }
["original":protected]=> array(0) { }
["relations":protected]=> array(0) { }
["hidden":protected]=> array(0) { }
["visible":protected]=> array(0) { }
["appends":protected]=> array(0) { }
["guarded":protected]=> array(1) {
[0]=> string(1) "*"
}
["dates":protected]=> array(0) { }
["touches":protected]=> array(0) { }
["observables":protected]=> array(0) { }
["with":protected]=> array(0) { }
["morphClass":protected]=> NULL
["exists"]=> bool(false)
}
现在使用正确的命名约定和以下代码修复了它:
$product = new Product;
$product->name = Input::get('product');
$product->category_id = Input::get('category');
$product->save();
$price = new Price;
$price->price = Input::get('price');
$price->save();
$product->price()->save($price);
在这里找到答案:
laravel: eloquent example insert data to database
更新数据及其关系时可以使用推送,但第一次创建时必须先保存产品再保存价格。
$product = new Products();
$product->name = 'pro2';
$product->save();
$price=new Prices();
$price->price=3;
$product->prices()->save($price);
此外,您应该使用事务来使数据处于一致状态。