为什么未创建库存?

时间:2019-11-26 01:39:22

标签: laravel

请考虑以下模型:

i=3

应该很容易理解:pnum

因此,您希望以下方法能起作用:

class Character extends Model {

    // ...

    public function inventory() {
        return $this->hasOne(Inventory::class);
    }
}


class Inventory extends Model {

    // ...

    public function items() {
        return $this->hasMany(Item::class, 'id', 'item_id');
    }
}

class Item extends Model
{
    // ....
}

因此,当您执行以下操作时:Character---hasOne-->Inventory--hasMany-->Item,您应该看到我们里面有一个项目。

我要做的是在没有很多表的情况下做的是:一个角色有一个包含很多物品的库存。

当我们这样做时,以上内容为我提供了:$character->inventory()->create([ 'character_id' => $character->id, 'item_id' => 1, ]); $character->inventory。为什么?

2 个答案:

答案 0 :(得分:1)

  

一个角色有一个包含很多物品的物品。

所以关系应该是

class Character extends Model {

    public function inventory() {
        // there should be an 'character_id' field on Inventory model.
        return $this->hasOne(Inventory::class);
    }
}


class Inventory extends Model {

    public function items() {
        // there should be an 'inventory_id' field on Item model.
        return $this->hasMany(Item::class);
    }
}

class Item extends Model
{
    public function inventory() {
        return $this->belongsTo(Inventory::class);
    }
}

然后您可以创建相关的清单,如下所示:

$inventory = Character::find(1)->inventory()->create([
    'name' => 'Inventory 1',
]);

答案 1 :(得分:0)

您在$ character-> inventory()中得到的是空值,因为您没有指定要使用的所有者密钥。

这是Laravel文档中的示例创建方法

$post = App\Post::find(1);

$comment = $post->comments()->create([
    'message' => 'A new comment.',
]);

看看这个link