我想连接两个表,但它只返回未为空的外键列。
它只会显示如果我使用1作为默认值给all,并且在外文id 1行中不放任何东西看上去它是空的,但问题是如果我更新一个具有默认值1值的行,它将用1值更新所有的外来id,我不希望这种情况发生。
$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');
我希望它使所有外键为空作为默认,并仍然可以返回所有使用联接。我怎样才能做到呢?
发布于 2019-01-26 16:13:28
你有一个关系,每一个单位可能与一个专营权。您可以使用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);
https://stackoverflow.com/questions/54382020
复制