如何“计算”查询结果并将其作为JSON格式的数组发送?

时间:2015-01-09 15:05:50

标签: php arrays json laravel laravel-4

详细

我想

  • 统计我查询的所有经销商
  • 在JSON文件中发送
  • 我知道我共有89个经销商,我这样做了dd(count($distributors));

  • 我相信这是最好的做法。

这是我尝试过的

  • 我初始化$count = 0;
  • 每次循环执行$count = $count + 1;
  • 时递增1
  • 将结果发送到阵列'count' => $count->toArray(),作为我的经销商阵列的一部分

这是我的代码

public function index()
{
    $distributors = [];
    $count = 0;

    foreach( 

        // Specific Distributors 
        Distributor::where('type','!=','OEM')->where('type','!=','MKP')
        ->get() as $distributor){

        // Variables
        $count = $count + 1; 
        $user = $distributor->user()->first();

        $distributors[$distributor->id] = [

        'user' => $user->toArray(),
        'distributor' => $distributor->toArray(),
        'hq_country' => $distributor->country()->first(),
        'address' => $distributor->addresses()
        ->where('type','=','Hq')->first()->toArray(),

        'count' => $count->toArray()

        ];
    }

    return Response::json($distributors);
}

结果

代码不会运行,因为我的$ distributor数组不存在......

如果我关闭'count' => $count->toArray(),它将会运行。

更新

  • 我使用的是Laravel 4.0
  • 代码是我的UrlController.php
  • 的一部分

3 个答案:

答案 0 :(得分:1)

将这种计数添加到您的结果中真的没有多大意义。发送结果并让客户端进行计数要简单得多。因为您实际拥有多少经销商的信息正好在您的经销商阵列中。这只是它的长度。

以下是javascript(以及$.ajax的示例,尽管这并不重要)

$.ajax({
    url: 'get/distributors',
    method: 'GET'
}).done(function(data){
    var count = data.length;
});

答案 1 :(得分:1)

型号:

class Distributor extends Eloquent {
    public function country()
    {
        return $this->hasOne('Country');
    }

    public function addresses()
    {
        return $this->hasMany('Address');
    }

    public function hqAddress()
    {
        return $this->addresses()->where('type', 'Hq')->first();
    }

    public function user()
    {
        return $this->hasOne('User');
    }
}

控制器:

$distributors = Distributor::whereNotIn('type', ['OEM', 'MKP'])
    ->with('country', 'user')->get();

$count = 0;
$distributors->each(function(Distributor $distributor) use(&$count) {
    $distributor->count = $count;
    $count++;
});

return Response::json($distributors);

答案 2 :(得分:0)

对不起,我错了。

我不是laravel专家。

但是这个片段是关于什么的?

这个Index函数是Model的一部分?

@ evoque2015正试图将一些自定义数组放入$ distributor [$ distributor-> id]?

如果这是目标,您是否可以使用任何简单的“计数”值进行任何测试?

我的猜测是:'count'索引不适用于您的Distributor :: where

(如果可以接受 - 显示为'count'的值,即使返回错误的结果/数据也不会破坏您的代码)。

所以我会尝试将此参数的名称更改为'my_custom_count',  它应该在分销商模型声明的某处声明吗?

发现这个: Add a custom attribute to a Laravel / Eloquent model on load?

这似乎证明了我的猜测。

所以我们需要改变模型类,如:

class Distributor extends Eloquent {

    protected $table = 'distributors';//or any you have already

    public function toArray()
    {
        $array = parent::toArray();
        $array['count'] = $this->count;
        return $array;
    }

.....
}

可能更多的模型更改或只是在表中添加'count'列: - )