Mysql 如何用morphMany方法逃逸斜杠?

Mysql 如何用morphMany方法逃逸斜杠?,mysql,laravel,eloquent,Mysql,Laravel,Eloquent,我的模型有许多定义了类的方法 public function relationships() { return $this->morphMany(RelationshipsModel::class, 'model', 'relation_model_type', 'model_id', 'id'); } 而且它没有找到我期望的数据。 检查日志我看到sql: SELECT * FROM `relationships` WHERE `relatio

我的模型有许多定义了类的方法

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` = 'Modules\Opportunities\Models\OpportunityModel'     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');
但我有一个错误:

Symfony\Component\Debug\Exception\FatalErrorException
Cannot declare class Modules\Relationships\Models\RelationshipsModel, because the name is already in use
哪种方式有效

拉维尔6号

提前谢谢

您可以使用变形贴图:


斜杠不应该是问题所在,因为SQL语句中的变量是准备好的,而不是内联的。在手动尝试中,变量是内联的,因此需要斜杠。我怀疑数据未显示的原因可能还有其他原因。您正在运行自动测试吗?您确定存在正确的数据吗?这些不是自动测试,我认为数据是正确的。请尝试修补(
php artisan tinker
),获取模型,并检查其关系。Tinker将向您显示关系对象是否正确,以及执行
->get()
时的实际结果。验证关系或控制器中的问题是否存在。
Relation::morphMap([
   'Opportunity' => 'Modules\Opportunities\Models\OpportunityModel'
]);