Laravel关系:hasOne vs belongsToMany

时间:2015-12-12 05:16:47

标签: laravel activerecord orm eloquent one-to-many

我有3张桌子:

   Schema::create('item_types', function (Blueprint $table) {
        $table->increments('id')->unsignet();
        $table->string('name')->unique();
    });

    Schema::create('items', function (Blueprint $table) {
        $table->increments('id')->unsignet();
        $table->string('name');
        $table->text('description');
        $table->string('photo');
        $table->integer('item_type_id')->unsignet(); //->nullable();
        $table->integer('brand_id')->unsignet(); //->nullable();
        $table->float('price')->unsignet();
        $table->timestamps();
    });

    Schema::create('brands', function (Blueprint $table) {
        $table->increments('id')->unsigned();
        $table->string('name');
        $table->string('logo');
        $table->text('description');
    });
需要他们之间的关系......

所以我设置:

hasOne for item_types and brands in Item.php 

belongsToMany for Items in ItemType.php and Brand.php

尝试了很多组合 知道这很愚蠢但不能做任何事情

当我填写这样的表格时:

factory(App\Item::class, 5)->create()->each(function($i) {
        $i->type()->save(factory(App\ItemType::class)->make());
        $i->brand()->save(factory(App\Brand::class)->make());
}

收到错误:

  

未找到列:1054未知列' item_type_id'在'字段列表'   (SQL:插入item_typesnameitem_type_id)值(等,   1))

如果我在Item.php中设置它:

`hasOne('App\ItemType', 'id', 'item_type_id');`

同样适用于品牌

所有表格都已填写,但item表格中的item_type_id和brand_id为空

[解决]

下面的答案+

factory(App\Item::class, 50)->create()->each(function($i) {
    $i->ItemType()
        ->associate(factory(App\ItemType::class)
        ->create());
    $i->brand()
        ->associate(factory(App\Brand::class)
        ->create());
    $i->save();

1 个答案:

答案 0 :(得分:3)

你们的关系是错误的。总是试着记住狗和主人的插图:

  

[...]让我们说我们有一个狗模型和一个所有者模型。我们可以立即说出所有者has_one狗和狗belongs_to所有者。

在您的特定情况下,您的狗是物品,其所有者是ItemType和品牌:

# Item.php

public function itemType()
{
    return $this->belongsTo('App\ItemType');
}

public function brand()
{
    return $this->belongsTo('App\Brand');
}

还有其他两个班级:

# ItemType.php

public function items()
{
    return $this->hasMany('App\Item');
}

# Brand.php

public function items()
{
    return $this->hasMany('App\Item');
}

快乐的编码!