Показывать только предметы, которых нет в других таблицах - PullRequest
0 голосов
/ 07 ноября 2018

Я хотел бы показать только школы, которые не являются предпочтительными.

, чтобы получить любимые, которые я использую:

 $favorite_schools = DB::table('favorite_schools')
                            ->select('favorite_schools.*', 'schools.name')
                            ->leftJoin('schools', 'schools.id', 'favorite_schools.school_id')
                            ->get();

Школьный стол:

Schema::create('schools', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->integer('active');
        $table->timestamps();
    });

Таблица любимых школ:

 Schema::create('favorite_schools', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id');
        $table->integer('school_id');
        $table->timestamps();
    });

Как я могу получить только те школы, в которых еще нет привилегий?

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Добавьте WhereNull('favorite_schools.school_id') к запросу, который вы используете для получения избранных. это даст вам не любимые школы.

Удачи

0 голосов
/ 07 ноября 2018

немного другой подход будет использовать whereNotExists, который должен быть быстрее, чем при использовании соединения

использование будет примерно таким:

$schools = DB::table('schools')
    ->whereNotExists(function ($query) {
        $query->select(DB::raw(1))
              ->from('favorite_schools')
              ->whereRaw('favorite_schools.school_id = school.id');
    })
    ->get();
0 голосов
/ 07 ноября 2018

Тебе нужно пойти другим путем. Получите школы и оставьте соединение в таблице избранных, затем получите результаты, которые не дали результатов, в таблице любимых_школ.

$favorite_schools = DB::table('schools')
                        ->select('schools.name', 'schools.id')
                        ->leftJoin('favorite_schools', 'schools.id', 'favorite_schools.school_id')
                        ->whereNull('favorite_schools.school_id')
                        ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...