在单个模型中检索具有递归关系的模型

时间:2017-01-10 13:02:58

标签: laravel model eloquent laravel-5.2

我有两个型号,帐户和承包商。帐户(用户)可以是承包商,因此我创建了递归关系。 Contractor模型看起来像这样。

class Contractor extends Model
{
    protected $table = "contractors";

    public function user()
    {
        return $this->belongsTo("\App\Account", "user_id", "id");
    }

}

请注意,帐户包含下一个字段

帐户

  • ID
  • passwd的
  • 名称

我想检索承包商及其字段和用户字段合并,就好像它们一样,就像那样:

承包商

  • ID
  • passwd的
  • 名称
  • contractor_type

我不想这样做:

\App\Contractor::with('user')->first();

我想用

检索所有字段
\App\Contractor::first()

可以通过覆盖某种方法或以某种棘手的方式实现这一目标吗?

2 个答案:

答案 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();

希望这对你有用!