我有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_types
(name
,item_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();
答案 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');
}
快乐的编码!