Laravel 4 在laravel 4中存储与透视表的关系

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

让我解释一下我试图实现的目标。 假设我有20种车型,例如跑车或家用车等,还有5种车型,例如保时捷

当我创建一辆汽车时,我可以选择同时检查多个属于该汽车的汽车类型,然后保存它

我已经做了一些家庭作业,看起来使用透视表是在laravel内部实现这一点的方法

在我的车型中,我采用了以下方法:

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”
,并将透视表重命名为simply
car\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);