ndp / customcollect
扩展Laravel集合
v1.0.8
2018-12-08 18:48 UTC
README
Laravel集合选择语句
关于
此包为Laravel集合类添加了一个选择方法语句,允许您像使用SQL选择属性语句一样使用它,并返回一个动态对象集合。请注意,在fetch之前仍应使用laravel select语句。这种方法更适合不扩展laravel Model类的实例。
用法
假设您有一些类似以下的类。
class Calendar { public $owner_name; /* @return collection */ public function getEventsPerRange($startDate, $endDate){ //TODO: implement method. } } class EventRepo extends Calendar { /* @var Collection $events */ protected $events; public function __constructor(array $events){ $this->events = collect($events); } public function selectEventsPerDateRange($startDate, $endDate){ $this->events = $this->getEventsPerRange($startDate, $endDate); return $this; } public function get() { return $this->events; } } class Event { public $id,$owner_first_name,$owner_last_name,$address,organizer,$summary; //NOTE: somehow these properties get updated. public function getOrganizer(){ return $this->organizer; } public function setOrganizer(Organizer $organizer){ return $this->organizer =$organizer; } } class EventOrganizer { public $displayName,$email,$id; }
一种当前设置响应对象的方式。
在这个例子中,静态方法get()将返回一个集合。在大多数情况下,您需要遍历每个对象,在操作完哪些属性将发送或隐藏到前端后,然后可以创建一个动态对象,这样就可以将其作为json等传递到前端。
$repo = new EventRepo($events); $events = $repo->selectEventsPerDateRange($startDate, $endDate)->get(); $eventsJson = collect(); foreach($events as $event){ $event = new \sdClass(); $event->{"organizer_name"} = $event->organizer->displayName; $event->{"contact_email} = $event->organizer->email; $eventJson->push($event); } return $eventsJson->toJson();
在集合中设置响应对象的一种更方便的方式。
为了在数据展示中节省时间,您可以使用带有属性和其新属性名称(由" as "分隔)的选择语句。您还可以使用点运算符遍历给定类中的嵌套关系或属性。注意,在选择方法字符串参数中,您可以深入到将要遍历的对象的多个属性,如下所示。
$events = $repo->selectEventsPerDateRange($startDate, $endDate)->get(); return $events->select("id as event_id" "organizer.displayName as organizer_name", "organizer.email as contact_email")->toJson();
注意,不需要预加载。当前选择方法仅支持使用获取器获取其值。
您也可以为每个循环的对象有一个回调函数。
对于需要更多重命名的属性,只需在参数末尾定义一个方法回调即可。方法回调将包含两个参数。
- $dummy对象按引用传递,因此不需要指定返回语句。
- $eventObject按值传递,可以用于连接属性。
$events = $repo->selectEventsPerDateRange($startDate, $endDate)->get(); return $events->select("organizer.displayName as organizer_name", "organizer.email as contact_email" function($dummy,Event $eventObject){ $dummy->{"full_name"} = $eventObject->owner_first_name . ' ' . $eventObject->owner_last_name; })->toJson();
包安装
使用composer require在您的项目中安装它。
composer require ndp/customcollect
可选
composer dump-autoload