Laravel - SELECT `::with` 控制器函数中的某些列

Laravel - SELECT only certain columns within a `::with` controller function

我的以下代码工作得很好,但是,它 returns 比每个 table:

所需的数据多
public function getIndex()
    {
        $alerts = Criteria::with('bedrooms', 'properties')
        ->where('user_id', '=', Auth::id())
        ->get();

        $this->layout->content = View::make('users.alert.index', 
            array('alerts' => $alerts));
    }

例如,我想要做的是 select bedroom table 中的 bedroom 列。现在,它 returns 所有列。

我试过:

public function getIndex()
    {
        $alerts = Criteria::with('bedrooms' => function($q){
            $q->select('bedroom');
        }, 'properties')
        ->where('user_id', '=', Auth::id())
        ->get();

        $this->layout->content = View::make('users.alert.index', 
            array('alerts' => $alerts));
    }

但出现以下错误:

syntax error, unexpected '=>' (T_DOUBLE_ARROW)

任何关于如何实现这一点的帮助将不胜感激。


更新

public function getIndex()
{
    $alerts = Criteria::with(
        ['coordinate' => function($w){
            $w->select('name', 'id');
        }],
        ['bedrooms' => function($q){
            $q->select('bedroom', 'criteria_id');
        }]
        , 'properties')
    ->where('user_id', Auth::id())
    ->get();

    $this->layout->content = View::make('users.alert.index', 
        array('alerts' => $alerts));
}

正确的 select 查询适用于最先查询的查询。如果我交换查询,bedroom 函数可以正常工作,但其余部分不会立即加载,select 查询也不会工作。

只需传递一个数组:

// note [ and ]
$alerts = Criteria::with(['bedrooms' => function($q){
        $q->select('bedroom', 'PK / FK');
    }, 'properties'])

另外请注意,您需要select该关系的键(关系的主key/foreign键)。

你的更新问题的答案是你需要像这样在同一个数组中加载其他值。

public function getIndex()
{
    $alerts = Criteria::with(
        ['coordinate' => function($w)
        {
            $w->select('name', 'id');
        },
        'bedrooms' => function($q)
        {
            $q->select('bedroom', 'criteria_id');
        }
        , 'properties'])
    ->where('user_id', Auth::id())
    ->get();

    $this->layout->content = View::make('users.alert.index', 
        array('alerts' => $alerts));
}