我有两张桌子:
organisations
包含:
id name address subscription_plan_id .... other columns
-- ---- ------- --------------------
1 xyz 123 St 23
subscription_plans
包含:
id name cost .... other columns
-- ------- -----
23 monthly 12.00
我为每个设置以下Eloquent关系的地方都有一个课程:
班级Organisation
:
public function subscriptionPlan()
{
return $this->hasOne(SubscriptionPlan::class, 'id', 'subscription_plan_id');
}
班级SubscriptionPlan
:
public function subscriptionPlan()
{
return $this->belongsTo(SubscriptionPlan::class, 'subscription_plan_id', 'id');
}
在我的控制器中,我想使用Eloquent关系创建一个包含每个表中所选列的集合,但是我没有在没有使用SQL的情况下设法完成此操作...我使用以下命令提取每个集合:
$subscriptionPlans = SubscriptionPlan::all();
$organisations = Organisation::all();
如何提取一个链接关系并提名我想要的列的集合?
像打击一样(不起作用):
$organisationsAndPlans = Organisation::all()
->subscriptionPlan()
->get('organisations.col1', 'subscription_plans.col3');
答案 0 :(得分:1)
您可以使用with
类上的Illuminate\Database\Query\Builder
方法直接加载关系。
Organisation::with([
'subscriptionPlan' => function($query) {
// Here you have to select the key that is being
// used by the relationship no matter what.
return $query->select('id', 'col2');
}
])->get('col1');
这将允许您选择要从关系中选择的列。
答案 1 :(得分:-1)
$organisationsAndPlans = Organisation::select('table1.col1','table2.col2')
->with('subscriptionPlan')
->join(function($join){
$join->on('table2.ref_id','=', 'table1.id'});
->get();