как вернуть все таблицы соединений, включая нулевые значения внешнего ключа - PullRequest
0 голосов
/ 26 января 2019

Я хочу объединить две таблицы, но он будет возвращать только столбец внешнего ключа без нуля

все это будет отображаться, только если я буду использовать 1 как значение по умолчанию для всех и ничего не помещать в строку внешнего идентификатора 1, чтобывыглядит как пустой, но проблема в том, что если я обновлю одну строку со значением по умолчанию 1, он обновит все внешние идентификаторы со значением 1, и я не хочу, чтобы это произошло.

$unit = DB::table('franchises')
       ->join('units', 'franchises.id', '=', 'units.franchise_id')
       ->orderBy('units.created_at', 'desc')->paginate(20);

return view('register-unit', compact('unit'));

У меня есть этозапрос на миграцию

$table->integer('franchise_id')->unsigned()->default(null); 
$table->foreign('franchise_id')->references('id')->on('franchises')->onDelete('cascade')->onUpdate('cascade');

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

1 Ответ

0 голосов
/ 27 января 2019

У вас есть отношение, где каждая единица может быть связана с франшизой.Вы можете использовать LEFT JOIN, чтобы использовать таблицу в качестве отправной точки и, при желании, совпадать с другой.Если отношение не совпадает, столбцы второго запроса будут пустыми.

Как таковой, ваш запрос возвращает все франшизы, которые относятся к единице.Вы можете сделать это отношение необязательным.

DB::table('franchises')
    ->leftJoin('units', 'franchises.id', '=', 'units.franchise_id')
    ->orderBy('units.created_at', 'desc')->paginate(20);

Но так как вы назвали свою переменную unit, а также сортируете результаты запроса по units.created_at, я думаю, что вы хотите вытащить все единицы, с опциейсоответствующая франшиза.Если это так, вы должны LEFT JOIN наоборот:

DB::table('units')
    ->leftJoin('franchises', 'franchises.id', '=', 'units.franchise_id')
    ->orderBy('units.created_at', 'desc')
    ->paginate(20);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...