ndp/customcollect

扩展Laravel集合

v1.0.8 2018-12-08 18:48 UTC

This package is auto-updated.

Last update: 2024-09-09 13:37:54 UTC


README

!Issues GitHub forks GitHub stars GitHub license

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


就这些。祝好!