Как избежать косой черты с помощью метода morphMany?

#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'
]);