#laravel #eloquent
#laravel #красноречивый
Вопрос:
Когда я повторяю свой запрос, используя dd($query->toSql());
, я получаю:
"select `item_num`, `item_name`, `primary_color`, `content`
where (`item_name` NOT LIKE ? and `item_name` NOT LIKE ? and `item_name` NOT LIKE ? )
and `primary_color` = ? or `primary_color` = ? or `primary_color` = ?
order by `item_name` asc ◀"
Что мне нужно, так это параграфы вокруг (
primary_color = ? or
primary_color = ? or
primary_color = ?)
, чтобы запрос выглядел как:
"select `item_num`, `item_name`, `primary_color`, `content`
where (`item_name` NOT LIKE ? and `item_name` NOT LIKE ? and `item_name` NOT LIKE ? )
and (`primary_color` = ? or `primary_color` = ? or `primary_color` = ? )
order by `item_name` asc ◀"
Вот мой код:
$query = DB::table('my_table');
$query = $query->select(array('item_num', 'item_name', 'color', 'content'));
$query = $query->where($this->filterArr);
$cc = count($myArr);
$ii = 0;
foreach ($myArr as $key => $value) {
$myArr = explode(" ", $value);
if($ii==0)
$query = $query->where( function(){ $column, '=', $myArr[0]);
else
$query = $query->orWhere($column, '=', $myArr[0]);
if(count($myArr)>1){
foreach($myArr as $filter){
if ($key=='collection'){
$filter = str_replace("-", " ", $filter);
}
$query = $query->orWhere($column, '=', $filter);
}
}
}
$ii ;
}
$query = $query->orderBy('item_name', 'asc')
->simplePaginate(50);
из этого я получаю ошибку syntax error, unexpected ','
из этой строки $query = $query->where( function(){ $column, '=', $myArr[0]);
Может ли кто-нибудь помочь добавить круглые скобки вокруг оператора WHERE, пожалуйста. Спасибо.
редактировать $myArr
— это набор фильтров
Array (
[color] => blue
[color] => purple
[material] => slick granite
)
Комментарии:
1. Ваш код довольно запутанный, и для того, чтобы мы могли решить вашу проблему, вам нужно включить $myArr и то, как он определяется. Должно быть лучшее решение, чем это tbh.
2. @mrhn добавил пример myArr, да, есть много условий, но я не смог обойти все требования.
Ответ №1:
попробуйте это, кстати, ваш цикл выглядит таким беспорядочным XD
если это то, чего вы хотите достичь предполагается :
$myArr = Array (
"color" => "blue"
"color" => "purple"
"material" => "slick granite",
"collection" => "slick-granite-blue-purple"
);
и если массив имеет ключевое имя «коллекция», то замените значение массива («-«) на (» «)
$query = DB::table('your_table');
$query = $query->select(array('item_num', 'item_name', 'color', 'content'));
$query = $query->where(function($query){
$query = $query->where('item_name', '!=', 'item1');
$query = $query->where('item_name', '!=', 'item2');
$query = $query->where('item_name', '!=', 'item3');
});//im using !=, replace with your need
$query = $query->where(function($filter) use($myArr){
$ii=0;
foreach ($myArr as $key => $value) {
if($ii==0){
if($key == 'collection')
$value = str_replace('-', ' ', $value);
$filter = $filter->where($key, '=', $value);
}else{
if($key == 'collection')
$value = str_replace('-', ' ', $value);
$filter = $filter->orWhere($key, '=', $value);
}
$ii ;
};
});
Комментарии:
1. но как насчет финала
$query = $query->orderBy('item_name', 'asc')->simplePaginate(50);
, где это вписывается?2. да, это так, и теперь я лучше понимаю, как писать запросы.