laravel toArray()花了太长时间

时间:2014-01-02 15:37:00

标签: php laravel

我有这个代码,我正在尝试填充json,因为这是一个API。

$mids   = Message::where('sender', $user)
                    ->orWhere('receipient', $user)
                    ->lists('mid');

$last   = Message::whereIn('mid', $mids)->orderBy('mid', 'desc')->first();
$final  = $last->toArray();
return $final;

如果我不将$ last设为数组,那么它将返回类似于:

的内容
"incrementing": true,
"timestamps": true,
"exists": true

但是当我添加toArray()函数时,它只是继续加载和加载,直到服务器说超出执行时间。为什么呢?


其他信息

此代码位于模型及其getLastMsgAttribute中,我附加last_msg

2 个答案:

答案 0 :(得分:0)

您可以使用toJson方法获取JSON条目,或者只是将其转换为字符串:

$final  = $last->toJson();
$final  = (string) $last;

这些可能会更快。

答案 1 :(得分:0)

正如@naththedeveloper提到的,toArray将确定将集合转换为模型所需的属性和关系。我们的问题是我们在模型上有3个变异子(例如getSomeAttribute),其中一个正在对每个模型执行数据库查询,这意味着2000个查询(实际上都是重复项)。

所以请检查您的属性和关系

还要研究resources,因为我认为这允许您定义自己的toArray方法,因此您只能选择最终数组所需的字段。

您也许还可以只使用Laravel的集合“ pluck”方法。