Laravel 5.2链接方法

时间:2015-12-31 08:39:31

标签: php laravel-5.1

我有两张桌子:

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');

2 个答案:

答案 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();