Я пытаюсь создать инвентаризацию для пользователей в Laravel 5.8, однако у предметов есть свои свойства, поэтому мне нужно было установить полиморфные отношения.При присоединении элементов к пользователям он пытается добавить модель пользователя в таблицу на itemable_type
и идентификатор пользователя на itemable_id
, а также добавить идентификатор пользователя на user_id
, что я мог бы обойти, передав необходимые модели,но когда я пытаюсь получить их, он пытается найти элемент с itemable_type = 'App \ Models \ User', что заставляет меня думать, что здесь что-то не так.Могу ли я иметь некоторую ориентацию относительно того, как ее решить?
class User extends Model
{
public function inventory()
{
return $this->morhpToMany(InventoryItem::class, 'itemable', 'user_inventories', null, 'itemable_id')
->withPivot('amount', 'notes');
}
}
class InventoryItem extends Model
{
public $timestamps = false;
protected $table = 'character_inventories';
protected $fillable = [
'character_id', 'itemable_type', 'amount', 'parent_id', 'notes'
];
public function cloth()
{
return $this->mophedByMany(Cloth::class, 'itemable');
}
public function food()
{
return $this->morphedByMany(Food::class, 'itemable');
}
// Other similar relations
}
// The Inventory migration:
Schema::create('user_inventories', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->unsignedInteger('itemable_id');
$table->string('itemable_type');
$table->unsignedInteger('amount')->default(0);
$table->text('notes', 65535)->nullable();
$table->foreign('character_id')->references('id')->on('characters');
});
Ожидаемый результат - модель пользователя с различными предметами в его инвентаре, но отношение пытается запросить, присоединившиськ себе и фильтрации по типу пользователя вместо фактических элементов.
Ошибка:
Syntax error or access violation: 1066 Not unique table/alias: 'user_inventories' (SQL:
select `user_inventories`.*,
`user_inventories`.`itemable_id` as `pivot_itemable_id`,
`user_inventories`.`itemable_type` as `pivot_itemable_type`,
`user_inventories`.`amount` as `pivot_amount`,
`user_inventories`.`parent_id` as `pivot_parent_id`,
`user_inventories`.`notes` as `pivot_notes`
from `user_inventories`
inner join `user_inventories` on `user_inventories`.`id` = `user_inventories`.`itemable_id`
where `user_inventories`.`itemable_id` in (4)
and `user_inventories`.`itemable_type` = App\Models\User)