比较两个不同表中两个不同的列和使用laravel 5.4
问题描述:
ORM的关系,我有两个车型之一是公司,另一种是采访或者从表显示其他列的数据。 公司表主键是Company_details_id并且该键用作的外键在采访表中使用f_company_id。比较两个不同表中两个不同的列和使用laravel 5.4
现在我的问题是,如何既键值,如果我的条件为真,它将从公司表返回列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;
}
}
请大家好,我在laravel雄辩ORM使用需要一个明确的答案5.4
答
这是不完全清楚你想要达到什么,但这里有一些指导原则。
首先,您似乎有“一家公司可以有很多采访”和“一次采访只能属于一家公司”作为您的关系。你已经在模型中正确地设置了它们。
因为你的关系,你的“GETALL”查询应该仅仅是:
$companies = Company::with(['interviews'])->select(['company_name'])->get();
那么你可以通过他们循环相对轻松:
foreach($companies as $company)
{
foreach($company->interviews as $interview) {
// Do something with $interview
}
}
使用与调用关系“采访”根据假定的密钥自然执行两个表之间的where子句。由于您似乎有非标准的主键,您需要更详细地定义hasMany和belongsTo。
public function interviews()
{
return $this->hasMany(Interview::class, 'f_company_id', 'company_details_id');
}
我建议打电话给您的模型公司和面试,而不是复数版本。这是因为一个单独的记录涉及一家公司(根据你写的内容做出假设)。从长远来看,你会发现它不那么令人困惑。
答
我想你可以试试这个:
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();
希望这对你的工作!