我想联接两个表,但它只会返回未为空的外键列
它只会显示所有如果我使用1作为默认值的所有值,并且不将任何东西放在外部id 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');
我希望它使所有外键默认为null,并且仍然可以使用join返回所有外键。我怎样才能做到?
答案 0 :(得分:0)
您有一个关系,其中每个单位 都可以与一个专营权相关。您可以使用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);