例如,在我的零件表中,我有一列“data_source”,如果值为“db_1”,则执行第一个查询,但如果值为“db_2”,则执行第二个查询
需要强调的是,作为条件的值是列的值
我希望你能帮助我,我已经处理这个问题几天了。
$query = self::search($search); //search from meilisearch
$query->query(function ($query) use ($parameters) {
$query->where(function ($query) use ($parameters) {
$query->where('data_source', 'db_1')->where(function ($query) use ($parameters) {});
$query->where('data_source', 'db_2')->where(function ($query) use ($parameters) {});
});
});
您不能将列名作为字符串传递,它将在数据库中作为字符串进行检查。而是使用原始方法:
$query = self::search($search)
->query(
fn ($q) => $q->whereRaw(
'CASE data_source WHEN ? THEN condition1 WHEN ? THEN condition2 ELSE TRUE END',
['db_1', 'db_2']
)
);
不清楚
db_1
和 db_2
值是否是用户提供的值,因此我对它们进行了参数化。如果它们是固定字符串,则可以安全地将它们直接放入查询中。无论您打算用 $parameters
做什么,请确保正确使用它。如果使用不当,原始查询可能会很危险。