SQL подзапросов к laravel - PullRequest
       5

SQL подзапросов к laravel

0 голосов
/ 03 марта 2020

Я пытался передать один запрос на laravel, но я не могу это сделать. Это запрос

SELECT * 
FROM installations 
WHERE id = 1 AND
(SELECT eliminado from projects where id = installations.project_id) = 0;

Я пробовал что-то вроде

$project = installations::where([
          ['id',$id],
          [function ($query) use ($projects) {
              $query -> select('eliminado')
                     -> from('projects')
                     -> where('id', $projects[0]->project_id);
            }, 0]])->get();

ИЛИ

$projects =  DB::table('installations')
        ->select('*')
        ->where([
          ['id', 'LIKE', $id],
          [(function($query) use ($projects) {
            $query -> select('*')
                   -> from('projects')
                   -> where('id', $projects[0]->project_id);
            }), 'LIKE', '0']
          ])
    ->get();

Но все равно не работает ..., кто-то может мне помочь с этим? спасибо

Ответы [ 3 ]

0 голосов
/ 03 марта 2020

Я думаю, вы можете использовать что-то вроде этого:

$project = installations::where('id', $id)
      ->whereRaw('(SELECT eliminado from projects where id = installations.project_id) = ?', [0])
      ->get();
0 голосов
/ 03 марта 2020

Вы можете сделать так ..

SELECT * 
FROM installations ins
WHERE id = 1 AND EXISTS
(SELECT 1 from projects p where p.id = ins.project_id AND p.eliminado =0);
0 голосов
/ 03 марта 2020

Используя отношение project в вашей Installation модели, вы можете сделать это следующим образом.

$intallation = Installation::whereHas('project', function($query) {
    $query->where('eliminado', '=', 0);
})->find($id);

Отношение project должно быть belongsTo.

Инталляция. php

public function project()
{
    $this->belongsTo(Project::class);
}
...