php – Laravel 5.1从原始数据库(或只是一个数组)创建集合或关联
发布时间:2020-12-14 19:36:53 所属栏目:大数据 来源:网络整理
导读:给定下面的表结构,我想返回一个Eloquent集合或者至少将原始DB结果转换为关联数组以便于迭代. 房屋 +----+---------------+| id | building_name |+----+---------------+| 1 | Building 1 || 2 | Building 2 |+----+---------------+ 客房 +----+-----------
给定下面的表结构,我想返回一个Eloquent集合或者至少将原始DB结果转换为关联数组以便于迭代.
房屋 +----+---------------+ | id | building_name | +----+---------------+ | 1 | Building 1 | | 2 | Building 2 | +----+---------------+ 客房 +----+-----------+-------------+ | id | room_name | building_id | +----+-----------+-------------+ | 1 | Room 1 | 1 | | 2 | Room 2 | 1 | | 3 | Room 3 | 2 | +----+-----------+-------------+ maintenancelog +----+-------------------+---------+---------------------+ | id | maintenance_value | room_id | created_at | +----+-------------------+---------+---------------------+ | 1 | Cleaned | 1 | 2015-09-10 00:54:59 | | 2 | Cleaned | 1 | 2015-09-13 01:55:59 | | 3 | Cleaned | 2 | 2015-09-09 02:56:59 | | 4 | Cleaned | 2 | 2015-09-14 03:57:59 | | 5 | Cleaned | 3 | 2015-09-08 04:58:59 | | 6 | Cleaned | 3 | 2015-09-15 05:59:59 | +----+-------------------+---------+---------------------+ 现在使用以下原始数据库查询.. $results = DB::select(' select b.building_name,r.room_name,x.maxdate FROM buildings b join rooms r on r.building_id = b.id join (select room_id,max(created_at) as maxdate from maintenancelog group by room_id) x on x.room_id=room.id having x.maxdate < DATE_SUB(NOW(),INTERVAL 10 DAY)'); 回报 Array ( [0] => stdClass Object ( [building_name] => Building 1 [room_name] => Room 1 [maxdate] => 2015-09-13 01:55:59 ) [1] => stdClass Object ( [building_name] => Building 1 [room_name] => Room 2 [maxdate] => 2015-09-14 03:57:59 ) [2] => stdClass Object ( [building_name] => Building 2 [room_name] => Room 3 [maxdate] => 2015-09-15 05:59:59 ) 是否有给出数组的Laravel辅助函数,我可以指定键和分组命令吗?有点像,按building_name,room_name分组,以便它返回一个集合或关联数组,其中“buildings”和“rooms”作为键,使迭代更容易?我可以建立一个,但这似乎是一个常见的任务. (我做了搜索) 我正在使用Eloquent并为表格制作模型,但查询对我来说太复杂了,无法弄清楚如何将其转换为Eloquent语句.那么即使有一种方法可以使用现有模型创建集合? (注意我已经弄清楚如何使用关系和查询范围从维护日志 – >房间 – >建筑物向后工作.但它将建筑物置于关系的最低层,我希望它是第一个) 解决方法
在建筑类:
public function rooms(){ return $this->hasMany('AppRoom'); } 在室内课程: public function maintenanceLog(){ return $this->hasMany('AppMaintenanceLog'); } 在MaintenanceLog类中: public function scopeLongest($query){ //you can name it as you like ofc. return $query->orderBy('created_at','desc')->first(); } 最后你可以使用: foreach(Building::all() as $building){ foreach($building->rooms() as $room){ echo 'building: ' . $building->building_name . ' room: ' . $room->room_name . ' maxdate: ' . $room->maintenanceLog()->longest()->created_at; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |