Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-仍然使用select语句加载不必要的列_Php_Laravel_Laravel 4_Eloquent - Fatal编程技术网

Php Laravel-仍然使用select语句加载不必要的列

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){

我想限制控制器函数的结果,只将某些列传递到视图中

这是必要的,因为它将在API中使用,因此我需要尽可能简化结果

我已通过以下功能成功完成此操作:

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问题中使用。