sigep/eloquent-enhancements

本包旨在为Laravel的Eloquent提供额外功能

0.2.6 2018-06-07 00:39 UTC

README

Build Status Scrutinizer Code Quality

本包旨在为Laravel的Eloquent提供额外功能。目前,这些功能以特质的形式提供,因此您无需更改模型结构。

错误

此特质为您模型添加了两种方法。

use Sigep\EloquentEnhancements\Traits\Error

setErrors

接受一个MessageBag并将其设置在$errors属性中。SaveAll使用它来存储错误,并允许您在控制器或视图中使用它们。

setErrors(Illuminate\Support\MessageBag $errors)

errors

返回由setErrors()设置的错误。如果错误未定义,则创建一个空的MessageBag。

errors()

SaveAll

此特质添加了仅通过一个调用即可保存相关对象的能力。例如,如果您有一个与Phone模型相关联的用户模型,在hasMany关系下,您可以使用一个方法调用就保存一个具有多个电话的用户。

use Sigep\EloquentEnhancements\Traits\SaveAll;

考虑以下模型

class User extends Eloquent
{
    use Sigep\EloquentEnhancements\Traits\Error;
    use Sigep\EloquentEnhancements\Traits\SaveAll;

    public function phones()
    {
        return $this->hasMany('Phone');
    }
}

class Phone extends Eloquent
{
    public function user()
    {
        return $this->belongsTo('User');
    }
}

我们强烈建议您使用模型观察者来验证您的数据,并使用setErrors()来传递验证消息。这是使用此特质时验证相关数据最佳方式。

您可以使用createAll()方法创建一个具有两个电话的用户。

$input = array(
    'name' => 'Bob',
    'email' => 'bob@gmail.com',
    'phones' => array (
        array('number' => '1111111'),
        array('number' => '2222222'),
    ),
);

$bob = new User();
$bob->createAll($input);

请注意,我们在User模型上创建了一个具有关系名称的键。这是必要的,这样SaveAll才知道涉及哪些模型以及如何保存数据。如果一切顺利,createAll将返回true。否则,将返回false。

现在,如果您需要使用用户模型(例如,当您有一个显示所有数据的表单时)编辑一个数字,您可以使用saveAll()方法。

$input = array(
    'name' => 'Bob',
    'email' => 'bob@gmail.com',
    'phones' => array (
        array('id' => 1, 'number' => '111-1111'),
        array('id' => 2, 'number' => '222-2222'),
    ),
);

$bob = User::find(1); // assuming bob have the id = 1
$bob->saveAll($input);

请注意,我们在数组中添加了数字的id。这是必要的,这样SaveAll就知道这不是一条新记录,而是一个更新。

当您需要删除相关模型时,您只需传递_delete键即可执行类似的操作。

$input = array(
    'name' => 'Bob',
    'email' => 'bob@gmail.com',
    'phones' => array (
        array('id' => 1, '_delete' => true),
    ),
);

$bob = User::find(1); // assuming bob have the id = 1
$bob->saveAll($input);

在这种情况下,电话#1将被删除。其他属性不是必要的,只需id_delete键即可。

SaveAll也可以处理BelongsToMany关系。您只需像上面的示例一样使用即可。但是,此类关系有一个特殊性。如果连接表有更多列,而不仅仅是外键,则可以创建一个关系模型来处理验证(假设您像之前建议的那样使用模型观察者进行验证 :) )。

更多示例即将推出。

--

使用StackEdit编写。