Параметры списка столбцов Laravel в запросе выбора - PullRequest
0 голосов
/ 17 февраля 2019

Я использую три таблицы запасные части , категории и , параметр и YajraDatatables.

Мое действие контроллера:

    public function anyData()
    {
        $spareparts_param_list = Sparepart::all();
        $list='';
        foreach ($spareparts_param_list as $value) {
            foreach ($value->category->parameter as $par_list) {
                $list .=  $par_list->Name.',';
            }
        }
        $spareparts = Sparepart::
            join('cars', 'spareparts.car_id', '=', 'cars.id')
            ->select(['spareparts.id', 'cars.Brend', 'spareparts.Model', $list]);
        $datatables = app('datatables')->of($spareparts);

        return $datatables->make();
    }

Мой список массивов $ list параметры печати, такие как цвет, тип, шины, .Как передать массив $ list в запросе выбора?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Вы можете использовать whereIn:

public function anyData()
{
    $spareparts_param_list = Sparepart::all();
    $list = [];
    foreach ($spareparts_param_list as $value) {
        foreach ($value->category->parameter as $par_list) {
            $list[] = $par_list->Name;
        }
    }
    $spareparts = Sparepart::
        join('cars', 'spareparts.car_id', '=', 'cars.id')
        ->whereIn('Name', $list)
        ->select(['spareparts.id', 'cars.Brend', 'spareparts.Model']);
    $datatables = app('datatables')->of($spareparts);

    return $datatables->make();
}

Вы можете выполнить эту необработанную команду Mysql:

select sp.id as sp_id, sp.model as sp_model, c.brend as car_brend, json_arrayagg(p.name) as p_name
from spareparts as sp
join cars as c on sp.car_id=c.id
join categories as cat on sp.category_id=cat.id
join parameters as p on cat.id=p.category_id
group by sp.model;

Приведенная выше команда даст вам результат, подобный следующему:

1 | Audi A6 door | Audi A6 | ["color", "window"]

Последний столбец будет столбцом json всех параметров, относящихся к каждой категории.

0 голосов
/ 17 февраля 2019

Вы можете использовать whereIn () , что-то вроде этого:

$users = DB::table('users')
                ->whereIn('id', [1, 2, 3])
                ->get();

Документы - https://laravel.com/docs/5.7/queries#where-clauses

...