Где не существует в Ларавеле - PullRequest
0 голосов
/ 06 июня 2018

Может ли кто-нибудь сказать мне, какую ошибку я могу иметь в своем запросе laravel, в основном я хочу перечислить записи таблицы, чей идентификатор не связан с другой таблицей.Я сделал это в Mysql с помощью этого запроса: SELECT * FROM item, ГДЕ НЕ СУЩЕСТВУЕТ (SELECT null FROM квалификаций, ГДЕ grades.item_id = item.id AND qualifications.user_id = 2);

, но теперь мне нужно сделать этотот же запрос в laravel, я пробовал это следующим образом: codigo

, и я получаю эту синтаксическую ошибку, которую я больше не знаю, как ее решить: error

Я очень благодарен всем, кто может сказать мне, что я делаю неправильно, или в какой форме я делаю этот запрос в Laravel.

1 Ответ

0 голосов
/ 06 июня 2018

Вы также можете переписать свой запрос как левое соединение, например

SELECT i.*
FROM item i
LEFT JOIN qualifications q ON q.item_id = i.id  AND q.user_id = 2
WHERE q.item_id IS NULL

В построителе запросов вы можете написать его как

DB::table('item as i')
    ->select('i.*')
    ->leftJoin('qualifications as q', function ($join) use($user_id) {
        $join->on('q.item_id', '=', 'i.id')
             ->on('q.user_id', '=', $user_id);
    })
    ->whereNull('q.item_id')
    ->get();

Другой подход, с которым я предлагаю вам перейти, -настройте свои отношения и модели и сделайте это красноречивым способом

class Item extends Model
{
    public function qualifications()
    {
        return $this->hasMany(\App\Models\Qualification::class, 'item_id');
    }
}

class Qualification extends Model
{
    public function qualifications()
    {
        return $this->belongsTo(Item::class, 'item_id');
    }
}

И тогда вы сможете использовать Запрос отсутствия отношений

Item::whereDoesntHave('qualifications', function ($query) use($user_id) {
    $query->where('user_id', '=', $user_id);
})->get();
...