Php Laravel-仍然使用select语句加载不必要的列
我想限制控制器函数的结果,只将某些列传递到视图中 这是必要的,因为它将在API中使用,因此我需要尽可能简化结果 我已通过以下功能成功完成此操作:Php Laravel-仍然使用select语句加载不必要的列,php,laravel,laravel-4,eloquent,Php,Laravel,Laravel 4,Eloquent,我想限制控制器函数的结果,只将某些列传递到视图中 这是必要的,因为它将在API中使用,因此我需要尽可能简化结果 我已通过以下功能成功完成此操作: public function getIndex() { $alerts = Criteria::select('id', 'user_id', 'coordinate_id', 'alert_name') ->with(['coordinate' => function($q){
public function getIndex()
{
$alerts = Criteria::select('id', 'user_id', 'coordinate_id', 'alert_name')
->with(['coordinate' => function($q){
$q->select('name', 'id');
}])
->get();
}
因此,它仅从标准表返回id
、user\u id
和coordinate\u id
但是,在下面的函数中,我使用了一个has
查询(访问一个关系),然后使用with
来限制列,但它仍然返回所有:
public function getMatches()
{
$matches = Criteria::select('id')
->has('alerts')
->with(['alerts' => function ($q){
$q->select('id', 'headline', 'price_value', 'price_type');
}])
->with('alerts.user.companies')
->get();
}
但是,例如,它仍然返回警报表中的description
列。with
查询继续进行has
查询显然不起作用(但没有出现错误)
另外,->with('alerts.user.companys')
查询将返回用户表中的所有内容,这也是不必要的。如何仅返回与用户相关的公司
表数据,以及与警报相关的用户
非常感谢您的帮助。根据您想要实现的目标,您可以使用$hidden
属性隐藏您不希望以json或数组形式返回的列
在警报
模型中,您可以执行以下操作:
protected $hidden = ['description'];
这样就不会返回description
字段
如果这不是您的方式(有时您希望返回描述),您可以创建额外的关系,在其中限制数据库中的字段
例如,您可以创建以下关系:
public function alertsSimple() {
return $this->hasMany('Alert')->select('id', 'headline', 'price_value', 'price_type', 'criteria_id');
}
也可能在您的选择中,问题是您根本不使用外键。您还可以尝试以下方法:
$q->select('id', 'headline', 'price_value', 'price_type','criteria_id');
而不是
$q->select('id', 'headline', 'price_value', 'price_type');
您对此有性能方面的原因吗?是的,它正在一个API问题中使用。