我有这个代码,我正在尝试填充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
答案 0 :(得分:0)
您可以使用toJson
方法获取JSON条目,或者只是将其转换为字符串:
$final = $last->toJson();
$final = (string) $last;
这些可能会更快。
答案 1 :(得分:0)
正如@naththedeveloper提到的,toArray将确定将集合转换为模型所需的属性和关系。我们的问题是我们在模型上有3个变异子(例如getSomeAttribute),其中一个正在对每个模型执行数据库查询,这意味着2000个查询(实际上都是重复项)。
所以请检查您的属性和关系
还要研究resources,因为我认为这允许您定义自己的toArray方法,因此您只能选择最终数组所需的字段。
您也许还可以只使用Laravel的集合“ pluck”方法。