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));
}
我的以下代码工作得很好,但是,它 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));
}