如何计算查询结果并将其作为 JSON 格式的数组发送?
How to `count` a query result and send it as an array in JSON format?
详情
我要
- 统计我查询的所有经销商
- 在 JSON 文件中一起发送
我知道我总共有89个经销商,我是这样做的dd(count($distributors));
我确定最佳做法是什么。
这是我试过的
- 我初始化
$count = 0;
- 每次循环执行加1
$count = $count + 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
对不起,我可能是错的。
我不是 laravel 专家。
但是这个片段是关于什么的?
这个索引函数是模型的一部分?
@evoque2015 正在尝试将一些自定义数组放入 $distributors[$distributor->id] 中?
如果这是目标,您能否使用您认为应该有效的 'count' 的任何简单值进行任何测试?
我的猜测是:'count' 索引不接受 table 用于您的 Distributor::where 函数
(如果它是 acceptable - 显示为 'count' 的值,即使 return 错误 result/data 也不会破坏您的代码)。
所以我会尝试将此参数的名称更改为 'my_custom_count',
应该在 Distributor 模型声明的某处声明吗?
找到这个:
Add a custom attribute to a Laravel / Eloquent model on load?
看来要证明我的猜测了
因此我们需要更改模型 class,例如:
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' 列添加到 table :-)
将这种计数添加到结果中确实没有多大意义。只发送结果并让客户端进行计数要简单得多。因为关于您实际拥有多少经销商的信息就在您的经销商列表中。只是它的长度。
这是一个 javascript 的例子(和 $.ajax
虽然这并不重要)
$.ajax({
url: 'get/distributors',
method: 'GET'
}).done(function(data){
var count = data.length;
});
型号:
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);
详情
我要
- 统计我查询的所有经销商
- 在 JSON 文件中一起发送
我知道我总共有89个经销商,我是这样做的
dd(count($distributors));
我确定最佳做法是什么。
这是我试过的
- 我初始化
$count = 0;
- 每次循环执行加1
$count = $count + 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
对不起,我可能是错的。
我不是 laravel 专家。
但是这个片段是关于什么的?
这个索引函数是模型的一部分?
@evoque2015 正在尝试将一些自定义数组放入 $distributors[$distributor->id] 中?
如果这是目标,您能否使用您认为应该有效的 'count' 的任何简单值进行任何测试?
我的猜测是:'count' 索引不接受 table 用于您的 Distributor::where 函数
(如果它是 acceptable - 显示为 'count' 的值,即使 return 错误 result/data 也不会破坏您的代码)。
所以我会尝试将此参数的名称更改为 'my_custom_count', 应该在 Distributor 模型声明的某处声明吗?
找到这个: Add a custom attribute to a Laravel / Eloquent model on load?
看来要证明我的猜测了
因此我们需要更改模型 class,例如:
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' 列添加到 table :-)
将这种计数添加到结果中确实没有多大意义。只发送结果并让客户端进行计数要简单得多。因为关于您实际拥有多少经销商的信息就在您的经销商列表中。只是它的长度。
这是一个 javascript 的例子(和 $.ajax
虽然这并不重要)
$.ajax({
url: 'get/distributors',
method: 'GET'
}).done(function(data){
var count = data.length;
});
型号:
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);