Laravel 4 在laravel 4中存储与透视表的关系
让我解释一下我试图实现的目标。 假设我有20种车型,例如跑车或家用车等,还有5种车型,例如保时捷 当我创建一辆汽车时,我可以选择同时检查多个属于该汽车的汽车类型,然后保存它 我已经做了一些家庭作业,看起来使用透视表是在laravel内部实现这一点的方法 在我的车型中,我采用了以下方法:Laravel 4 在laravel 4中存储与透视表的关系,laravel-4,relationship,pivot-table,Laravel 4,Relationship,Pivot Table,让我解释一下我试图实现的目标。 假设我有20种车型,例如跑车或家用车等,还有5种车型,例如保时捷 当我创建一辆汽车时,我可以选择同时检查多个属于该汽车的汽车类型,然后保存它 我已经做了一些家庭作业,看起来使用透视表是在laravel内部实现这一点的方法 在我的车型中,我采用了以下方法: public function types() { return $this->belongsToMany('types', 'car_types'); } 在我的类型模型中使用以下方法: pub
public function types()
{
return $this->belongsToMany('types', 'car_types');
}
在我的类型模型中使用以下方法:
public function cars()
{
return $this->belongsToMany('Car');
}
我的桌子如下所示:
汽车-id
-名称
-在
-更新地址:
类型
-id
-名称
-在
-更新地址:
汽车类型
-车号
-类型标识
我试图在控制器内执行的操作是:
$car = new Car();
Car::create( Input::except('types') );
foreach(Input::get('types') as $type)
{
$car->types()->associate($type);
$car->save();
}
这给了我以下错误:调用未定义的方法Illumb\Database\Query\Builder::associate() 我希望有人能帮我解决这个问题
提前谢谢。你就快到了。您是对的,
汽车
和类型
这两种车型处于多对多
关系中
在您的模型中,您有这样的代码:
return $this->belongsToMany('types', 'car_types');
及
错误#1:
在Car
模型的types()。因此,您应该将其更改为:
return $this->belongsToMany('Type', 'car_types');
错误#2
在汽车
模型中,您将枢轴表定义为汽车类型
,但类型
模型中缺少枢轴定义。从car
模型中的types()
方法中删除,“car\u types”
,并将透视表重命名为simplycar\u type
,或者将,“car\u types”
添加到type
模型中的cars()
方法中
错误#3
正确设置所有模型后,您可以在控制器中执行以下操作:
$car = new Car();
$car->name = Input::get('car_name_form_field_name_attribute');
$car->save();
$types = Input::get('types');
$car->types()->sync($types);
错误#4
我不确定这是否只是复制/粘贴错误,但透视表似乎缺少主键字段。每个表都需要一个主键字段,因此您的car\u type
表应该如下所示:
汽车类型
- 身份证
- 车号
- 类型识别码
您还可以使用attach()
而不是sync()
。更多关于这两者之间的区别
请试用此代码,并告诉我们是否有效。谢谢!有一件事我需要更改,那就是创建一个变量Car::create(Input::except('types');然后用它来附加类型。非常感谢你帮助我!
$car = new Car();
$car->name = Input::get('car_name_form_field_name_attribute');
$car->save();
$types = Input::get('types');
$car->types()->sync($types);