我有 3 个表结构,如下所示:-
库存采购
id | 实体类型 | 实体_id |
---|---|---|
1 | 应用程序\模型\供应商 | 1 |
2 | 应用程序\模型\公司 | 1 |
供应商
id | 名字 |
---|---|
1 | 供应商A |
2 | 供应商B |
公司
id | 名字 |
---|---|
1 | A公司 |
2 | B公司 |
我需要在我的股票购买索引页面中输出entity_name,所以预期的结果将如下所示
预期结果
id | 名字 |
---|---|
1 | 供应商A |
2 | A公司 |
出于某种原因,我不想使用 $stockPurchase->relation->name,我想输出像 $stockPurchase->entity_name 这样的名称,所以我需要在运行查询时完成它,下面是我当前的代码:-
$model->newQuery()
->select([
'stock_purchases.*',
DB::raw("(CASE
WHEN entity_type = 'App\Models\Supplier' THEN suppliers.name
WHEN entity_type = 'App\Models\Company' THEN companies.name
ELSE 'Something went wrong'
END) AS entity_name"),
])
->leftJoin('suppliers', function($join){
$join->on('suppliers.id', '=', 'stock_purchases.entity_id')
->where('stock_purchases.entity_type', Supplier::class);
})
->leftJoin('companies', function($join){
$join->on('companies.id', '=', 'stock_purchases.entity_id')
->where('stock_purchases.entity_type', Company::class);
})
->get();
到目前为止我在这个查询中发现了两个问题:-
WHEN entity_type = 'App\Models\Supplier'
这部分总是不匹配,所以我总是会得到“出了问题”作为输出,我认为是因为斜杠,即使我使用双斜杠也会得到相同的结果
THEN suppliers.name
这部分总是返回空,它无法从另一个表获取列
我用 3 个斜杠修复了它
App\\\Models\\\Supplier
,现在正在工作,但我仍然不知道为什么
它对我来说有两个反斜杠,我认为这是因为 SQL 将反斜杠视为转义字符:
选择* 来自发票行 其中invoiceable_type != 'App\Models\Payment';