#mysql #laravel #eloquent
#mysql #laravel #красноречивый
Вопрос:
В моей модели есть метод morphMany с определенным классом
public function relationships()
{
return $this->morphMany(RelationshipsModel::class, 'model', 'relation_model_type', 'model_id', 'id');
}
и он не находит данные, которые я ожидаю.
Проверяя журналы, я вижу sql:
SELECT *
FROM `relationships`
WHERE `relationships`.`model_id` = '1' AND `relationships`.`relation_model_type` = 'ModulesOpportunitiesModelsOpportunityModel' AND
...
и если вручную сократить его, например:
SELECT *
FROM `relationships`
WHERE `relationships`.`model_id` = '1' AND `relationships`.`relation_model_type` = 'Modules\Opportunities\Models\OpportunityModel' AND
Я получил действительные результаты.
Я попытался изменить модель как :
return $this->morphMany(addslashes(RelationshipsModel::class), 'model', 'relation_model_type', 'model_id', 'id');
Но я получил ошибку :
SymfonyComponentDebugExceptionFatalErrorException
Cannot declare class ModulesRelationshipsModelsRelationshipsModel, because the name is already in use
Какой способ допустим?
laravel 6
Заранее спасибо!
Комментарии:
1. Косые черты не должны быть проблемой, поскольку переменные в операторах SQL подготавливаются, а не встроены. В вашей попытке вручную переменная встроена, поэтому необходимы косые черты. Я подозреваю, что может быть другая причина, по которой данные не отображаются. Вы запускаете автоматические тесты? Вы уверены, что присутствуют правильные данные?
2. Это не автоматические тесты, и я полагаю, что данные верны
3. Попробуйте tinker (
php artisan tinker
), получите модель и проверьте ее взаимосвязь. Tinker покажет вам, корректен ли объект отношения, и каков фактический результат при выполнении->get()
. Убедитесь, что проблема актуальна в отношении или в вашем контроллере.
Ответ №1:
Вы можете использовать morph map:
https://laravel.com/docs/6.x/eloquent-relationships#custom-polymorphic-types
Relation::morphMap([
'Opportunity' => 'ModulesOpportunitiesModelsOpportunityModel'
]);