Я использую полиморфные отношения Laravel с картой морфинга, чтобы связать разные модели с одной таблицей. Однако я столкнулся с проблемой, когда работает только первая модель на карте морфинга, а остальные игнорируются.
Вот как я настроил свою морф-карту:
public function model()
{
return $this->morphTo();
}
Relation::morphMap([
'coupon' => Product::class,
'offer' => Product::class,
]);
public function scopefilter($query)
{
return $query->where(function ($query) {
// Include sliders with active morph relationships
$query->whereHasMorph('model','*', function ($query, $type) {
if (in_array($type,[ Blog::class, Coupon::class, Offer::class])) {
$query->active();
}
})->orWhereNull('model_type'); // Or include sliders without any morph
});
}
Расширенные модели Coupon, Offer и все они наследуются от модели Product.
Проблема, с которой я столкнулся, заключается в том, что когда я пытаюсь получить связанную модель слайдера с помощью $slider->model, он возвращает экземпляр только в том случае, если это продукт, но не в том случае, если это купон, предложение, . Однако, когда я меняю порядок карты морфинга, работает только первый на карте, а остальные игнорируются.
Я проверил, что схема базы данных правильна и все модели правильно загружены. Что может быть причиной этой проблемы и как ее решить?






Если у вас есть подклассы для Coupon и Offer, используйте их в карте морфинга. Если они оба укажут класс Product, Laravel создаст экземпляр объекта Product.
Изменять
Relation::morphMap([
'coupon' => Product::class,
'offer' => Product::class,
]);
к
Relation::morphMap([
'coupon' => Coupon::class,
'offer' => Offer::class,
]);
В результате быстрого поиска я нашел этот старый, но полезный пост, в котором говорится, что вам необходимо переопределить функцию getMorphClass в ваших классах, наследующих от Product. Например:
class Coupon extends Product
{
public function getMorphClass()
{
return 'coupon';
}
}
я попробовал ```` Relation::morphMap([ Coupon::class => Product::class, Offer::class => Product::class, ]); ````работает только по купону, и если я сделаю предложение выше купона, предложение не вернет купон
@Kareimovich Я нашел дополнительную информацию об использовании наследования и полиморфных отношений. Попробуйте это
Подоконник Никаких данных не вернулось, самое безумие в том, что когда я загружаю модель отношений, она возвращается, а когда я делаю, она не возвращается, посмотрите, я обновил qs
Какое имя указано в поле таблицы базы данных *_type? Соответствует ли оно названию морф-карты «купон»? Альтернатива — вернуть полное имя класса в функции getMorphClass и не использовать массив morphMap.
я получил то же имя от БД и сработал, ты спас мне жизнь, спасибо
Еще раз спасибо, я очень признателен
не работает, просто намекните, что модель класса купона Купон расширяет продукт