比较两个不同表中的两个不同列,并使用laravel 5.4中的orm关系显示来自任一表的其他列数据

时间:2017-04-21 11:07:13

标签: php mysql laravel laravel-5 orm

我有两个模型,一个是公司,另一个是访谈公司表主键为 Company_details_id ,此键在Interviews表中用作外键 f_company_id

现在我的问题是如果我的条件为真,如何比较两个键值,它将从公司表返回 company_name 列。

我的公司模特:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;


class Companies extends Model
{
 protected $table = 'company_details';

  protected $primaryKey = 'company_details_id';


  public function interviews()
  {
      return $this->hasmany('App\Interviews', 'f_company_id');
  }


}

我的访谈模型:

<?php

use Illuminate\Database\Eloquent\Model;


class Interviews extends Model
{
 protected $table = 'interview_schedule';

 protected $primaryKey ='schedule_id';



 public function getCompanies()  
   {
        return $this->belongsto('App/Companies'); 
    }


}

我的控制器:

<?php

namespace App\Http\Controllers;


use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use App\Companies;
use App\Interviews;


class PracticeController extends Controller

{
   public function getAll()
   {

    $getcompany=Companies::where('Companies.company_details_id','=','Interviews.f_company_id')
                 ->select('company_name')->get();

      echo $getcompany; 

   }


}

拜托,伙计们,我需要一个明确的答案,使用雄辩的orm laravel 5.4

2 个答案:

答案 0 :(得分:1)

目前还不完全清楚你想要达到的目标,但这里有一些指导原则。

首先,您似乎有“一家公司可以有很多面试”和“面试只能属于一家公司”作为您的关系。您已在模型中正确设置了这些内容。

由于您的关系,您的“getAll”查询应该只是:

$companies = Company::with(['interviews'])->select(['company_name'])->get();

然后你可以相对轻松地遍历它们:

foreach($companies as $company)
{
  foreach($company->interviews as $interview) {
    // Do something with $interview
  }
}

使用带有的调用关系“interview”,它基于假定的键自然地执行两个表之间的所有where子句。由于您似乎拥有非标准主键,因此您需要更详细地定义hasMany和belongsTo。

public function interviews()
{ 
  return $this->hasMany(Interview::class, 'f_company_id', 'company_details_id');
}

我建议您拨打公司和面试模型,而不是复数版本。这是因为单个记录涉及单个公司(基于您所写的内容的假设)。从长远来看,你会发现它不那么令人困惑。

答案 1 :(得分:0)

我想你可以试试这个:

 DB::table('interview_schedule')
 ->select('company.company_name')
 ->join('company','company_details.company_details_id','=','interview_schedule.f_company_id')
 ->where('interview_schedule.f_company_id','=','company.company_details_id')
 ->get();

希望这对你有用!