如何根据表本身 laravel 中找到的值进行查询

问题描述 投票:0回答:1

例如,在我的零件表中,我有一列“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) {});
    });
});
php laravel eloquent
1个回答
0
投票

您不能将列名作为字符串传递,它将在数据库中作为字符串进行检查。而是使用原始方法

$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
做什么,请确保正确使用它。如果使用不当,原始查询可能会很危险。

© www.soinside.com 2019 - 2024. All rights reserved.