我有两个模型,一个是公司,另一个是访谈。 公司表主键为 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
答案 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();
希望这对你有用!