Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 20.01.2017 14:56:45

перевести запрос в формат лары

здравствуйте.

есть sql запрос,

SELECT vuz.id, vuz.vuz AS vuz, tmp.* 
FROM vuz, (select spec.id as idsp, vuz.id_city, spec.spec as spec, vuz.golovnoyvuz as g_vuz, 
spec.budzhmest, spec.napr, napr.id, spec.stoimost, AVG(spec.stoimost) 
from vuz, spec where vuz.id = spec.id_vuz and spec.stoimost>0 group by vuz.golovnoyvuz ) tmp 
WHERE vuz.id = tmp.g_vuz and vuz.golovnoyvuz = 0

нужно преобразовать его в формат запросов лары ->where()->leftJoin итд. помогите плз

вот попытка, но запрос не видит tmp.g_vuz в чем причина может быть?

DB::table(DB::raw("vuz,(select spec.id as idsp, vuz.id_city, spec.spec as spec, vuz.golovnoyvuz as g_vuz, spec.budzhmest, 
spec.napr, napr.id, spec.stoimost, AVG(spec.stoimost)
from vuz, spec where vuz.id = spec.id_vuz and spec.stoimost>0 group by vuz.golovnoyvuz ) as
tmp"))->select('vuz.id', 'vuz.vuz AS vuz', 'tmp.*')
        ->where('vuz.id' ,'=', 'tmp.g_vuz')
        ->where('vuz.golovnoyvuz','=','0' )->orderBy('avg','desc')->get();

Изменено vuzopedia (20.01.2017 14:57:43)

Не в сети

#2 20.01.2017 15:12:11

Re: перевести запрос в формат лары

lara 5.3. суть в чем: есть 2 таблицы. vuz, spec. в vuz вузы и факультеты. специальности из таблицы spec относятся к факультетам.

в таблице vuz есть поле golovnoyvuz. в этом поле хранятся id головных вузов. допустим МГУ - id 1 . факультеты мгу id 2, id 3, id 4. у факультетов в поле golovnoyvuz - 1.

Не в сети

#3 20.01.2017 15:21:31

Re: перевести запрос в формат лары

select v1.*, avg(spec.stoimost)
from vuz v1 
  inner join vuz v1 on v1.id=v2.golovnoyvuz
  inner join spec on v2.id=spec.id_vuz
where
  v1.golovnoyvuz = 0 and
  spec.stoimost > 0
group by v1.id

видимо что-то в этом роде

такое перевести в построитель лары куда проще чем подзапросы. тем более что оптимизатор mysql и так превратит этот подзапрос в точно такой же джойн

Не в сети

#4 20.01.2017 15:23:38

Re: перевести запрос в формат лары

constb, сколько возьмете денег, чтобы решить задачу?

Изменено vuzopedia (20.01.2017 15:25:02)

Не в сети

#5 20.01.2017 15:59:05

Re: перевести запрос в формат лары

либо кто возьмется.

Не в сети

#6 20.01.2017 19:02:34

Re: перевести запрос в формат лары

from vuz v1
  inner join vuz v1

это как выразить?

\DB::table('wealqa_vuzy_vuzies', 'v1')
            ->join('wealqa_vuzy_vuzies', 'v1', 'v1.id', 'v2.golovnoyvuz')
            ->join('wealqa_vuzy_specs', 'v2.id', 'wealqa_vuzy_specs.id_vuz')
            ->select('v1.*')
            ->where('v1.golovnoyvuz', 0)
            ->where('v1.id_city', 59)
            ->where('wealqa_vuzy_specs', '>', 0)
            ->groupBy('v1.id')
            ->get();

Изменено vuzopedia (20.01.2017 19:02:49)

Не в сети

#7 23.01.2017 06:55:12

Re: перевести запрос в формат лары

что-то близкое к этому. надо сначала запрос написать и протестить его в консоли БД (пхпмайдмин или что-то ещё) а потом уже на ларавеле его повторять

и ещё – для отладки на построителе можно вместо get вызвать toSql и посмотреть что он сгенерировал и поправить если что не так

Не в сети

Подвал раздела