【问题标题】:Retrieve model with its recursive relationship in a single model在单个模型中检索具有递归关系的模型
【发布时间】:2017-01-10 13:02:58
【问题描述】:

我有两个模型,帐户和承包商。一个帐户(用户)可以是一个承包商,所以我创建了一个递归关系。 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()

是否有可能通过重写某些方法或以某种棘手的方式来实现?

【问题讨论】:

  • 不可能,需要关系
  • 您需要一个join 语句来实现这一点。

标签: laravel model eloquent laravel-5.2


【解决方案1】:

您需要一个连接语句来实现这一点。沿着这些思路(有内、左和右连接,我不确定哪一个最适合你)。

$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();

我假设表名是“accounts”和“contractors”。

【讨论】:

    【解决方案2】:

    我认为您的查询如下:

    $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();
    

    希望这对你有用!

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多