Как вставить имя столбца SQL в необработанный запрос из PHP/Laravel

У меня есть этот код в Laravel:

DB::table('items')
    ->whereRaw("? = 1", ['active'])
    ->get();

В моей таблице базы данных у меня есть столбец с именем active, и я хочу выполнить запрос:

SELECT *
FROM items
WHERE active=1

Мой код дает сбой, потому что запрос передает мой параметр 'active' как строку вместо имени столбца в синтаксисе SQL (что является ожидаемым поведением). Итак, вместо вышеперечисленного я получаю что-то вроде этого:

SELECT *
FROM items
WHERE "active"=1

Есть идеи, как это решить?

PS: Я попробовал функцию MySQL TRIM, но безуспешно (возможно, я сделал это неправильно).


person padawanTony    schedule 28.04.2020    source источник
comment
Почему бы не использовать DB::table('items')->where('active',1)?   -  person Makdous    schedule 29.04.2020
comment
Я хочу, чтобы это было динамично. На самом деле active это monday. У меня есть все дни в моей базе данных со значением 1 или 0. Итак, я хочу иметь возможность сказать, что если сегодня понедельник, а monday равно 1 в моей таблице, выберите этот элемент. По-моему, я смогу использовать, например, Carbon, получить название сегодняшнего дня и динамически передать его в свой запрос.   -  person padawanTony    schedule 29.04.2020
comment
Почему бы не использовать DB::table('items')->where($day,1) ?   -  person Arthur Samarcos    schedule 29.04.2020
comment
@ArthurSamarcos да, это сработало бы, если бы я связал метод whereRaw с методом where (поскольку у меня больше кода SQL в whereRaw), но мне было интересно, смогу ли я сделать это в whereRaw   -  person padawanTony    schedule 29.04.2020


Ответы (1)


Это не самый чистый способ;

$day = 'Monday'; // dynamically Tuesday, Wednesday....
$method = 'where' . $day;

return DB::table('items')->$method('1')->get();
person Ersoy    schedule 29.04.2020
comment
Хия, спасибо за ответ. Это работает (хотя мне действительно было интересно, как это сделать в методе whereRaw, потому что у меня там больше кода SQL, но при необходимости я могу связать методы). Можете ли вы объяснить, почему это работает? Например, $method заменяется на whereMonday? И почему это работает? - person padawanTony; 29.04.2020
comment
@padawanTony Да, вы заменяете его волшебным методом и позволяете связать его. этот пост объясняет это stackoverflow.com/a/52918904/2188922 очень хорошо. - person Ersoy; 29.04.2020