У меня есть 2 таблица, связанная с помощью полиморфных отношений:Laravel - Красноречивый - Полиморфные отношения с пространствами имен
The Store стол:
id | name | ...
15 | my_store | ...
И стол Tag, который подключен к столу магазина через related_id и тип.
id | related_id | tag | created | type
1 | 15 | test | 00:00:00 | store
2 | 15 | dummy | 00:00:00 | product
Таким образом, в этом примере, магазин «my_store» имеет только тег «тест» («фиктивный» является тег для продукта, а не магазин, кроме того, он имеет тот же related_id).
У меня есть модель магазина, определенный в моем коде следующим образом:
class Store extends Model {
protected $table = 'store';
public function tags()
{
return $this->morphMany('App\Tag', 'related', 'type');
}
}
И модель тег:
class Tag extends Model {
protected $table = 'tags';
public function related()
{
return $this->morphTo();
}
}
Но когда я пытаюсь запустить
$store->tags;
Я видел что запрос, который Laravel пытается запустить, это:
SQL: select * from `mwp_tags` where `mwp_tags`.`related_id` = 46
and `mwp_tags`.`related_id` is not null
and `mwp_tags`.`type` = App\Store)
Запрос ищет App \ Магазин вместо магазин
Я не могу изменить значение в БД, и я не хотел бы использовать
protected $morphClass = 'store';
внутри магазина как я не знаю, нужно ли было бы создать другое отношение morphMany, возможно, с другим именем типа.
Кто-нибудь знает, как пропустить эту проблему? Благодаря!
Laravel нуждается в нем как 'App \ Store', поэтому он знает, какой класс загрузить его как. – ceejayoz