我有两个型号,帐户和承包商。帐户(用户)可以是承包商,因此我创建了递归关系。 Contractor模型看起来像这样。
class Contractor extends Model
{
protected $table = "contractors";
public function user()
{
return $this->belongsTo("\App\Account", "user_id", "id");
}
}
请注意,帐户包含下一个字段
帐户
我想检索承包商及其字段和用户字段合并,就好像它们一样,就像那样:
承包商
我不想这样做:
\App\Contractor::with('user')->first();
我想用
检索所有字段\App\Contractor::first()
可以通过覆盖某种方法或以某种棘手的方式实现这一目标吗?
答案 0 :(得分:1)
您需要一个join语句才能实现此目的。沿着这些方向的东西(有内,左,右连接,我不确定哪一个最适合你)。
$contractor = \App\Contractor::join('users', 'contractors.user_id', '=', 'accounts.id')
->select('accounts.id', 'contractors.user_id', 'accounts.id', 'accounts.passwd', 'accounts.name', 'contractors.contractor_type')
->first();
我假设表名为“帐户”和“承包商”。
答案 1 :(得分:1)
我认为你的查询如下:
$rsltContractors = \App\Contractor::selectRaw('accounts.id', 'accounts.passwd', 'accounts.name','contractors.id','contractors.user_id','contractors.name','contractors.contractor_type')
->join('accounts', 'accounts.id', '=', 'contractors.user_id')->first();
希望这对你有用!