startup-palace / laravel-helpers
为您的Laravel应用程序收集了一系列辅助函数。
dev-master
2019-07-05 15:53 UTC
Requires
- illuminate/database: ~5.2
- kblais/laravel-uuid: ^0.1.0
- kblais/query-filter: ^1.1
Requires (Dev)
- orchestra/testbench: ^3.2
- phpunit/phpunit: ^4.0
This package is not auto-updated.
Last update: 2024-09-28 20:14:44 UTC
README
此包已被弃用,建议使用 kblais/laravel-helpers。
Laravel-helpers 是一个用于您的Laravel应用程序的辅助函数集合。
安装
使用Composer要求此包
composer require startup-palace/laravel-helpers
辅助函数列表
SingularTableNameTrait
使用单数表名而不是默认的复数表名。
用法
将特性添加到您的模型中
<?php namespace App; use Illuminate\Database\Eloquent\Model; use StartupPalace\LaravelHelpers\Eloquent\SingularTableNameTrait; class User extends Model { use SingularTableNameTrait; }
OrderByDefaultOrderTrait 和 OrderByDefaultOrderInterface
这是一个全局范围,可以在您的Eloquent模型上应用默认排序,以及一个特性,您可以直接在模型属性中定义默认排序。
用法
namespace App; use Illuminate\Database\Eloquent\Model; use StartupPalace\LaravelHelpers\Eloquent\OrderByDefaultOrderTrait; use StartupPalace\LaravelHelpers\Eloquent\OrderByDefaultOrderInterface; class User extends Model implements OrderByDefaultOrderInterface { use OrderByDefaultOrderTrait; public function getDefaultOrder() { /** * Defaults to * column: self::CREATED_AT * asc: true */ return [ 'column' => 'last_login_at', 'asc' => 'desc', ]; } }
关系辅助函数
为您的Eloquent关系提供一系列辅助函数。
syncHasManyRelation
同步hasMany关系,删除旧项,更新现有项和创建新项。
用法
让我们从这个模型开始
namespace App; use App\Cat; use Illuminate\Database\Eloquent\Model; use StartupPalace\LaravelHelpers\Eloquent\RelationshipHelpersTrait; class User extends Model { use RelationshipHelpersTrait; protected $fillable = [ 'name', 'email', 'cats', ]; protected static function boot() { parent::boot(); self::saved(function ($user) { $user->syncHasManyRelation('cats'); }); } public function cats() { return $this->hasMany(Cat::class); } public function setCatsAttribute($cats) { $this->setHasManyItems('cats', $cats); } }
基于此,您可以直接像这样将猫添加到用户中
$user->create([ 'name' => 'John Doe', 'email' => 'john.doe@example.com', 'cats' => [ [ 'name' => 'Garfield', 'color' => 'orange', ], [ 'number' => 'Fuzzy', 'color' => 'yellow', ], ], ]);
当您更新模型时,如果传递一个 cats 键,则如果没有,猫将被自动创建、更新或删除。
syncHasOneRelation
同步hasOne关系,创建新的关系项或更新它。
用法
namespace App; use App\Cat; use Illuminate\Database\Eloquent\Model; use StartupPalace\LaravelHelpers\Eloquent\RelationshipHelpersTrait; class User extends Model { use RelationshipHelpersTrait; protected $fillable = [ 'name', 'email', 'address', ]; protected static function boot() { parent::boot(); self::saved(function ($user) { $user->syncHasOneRelation('address'); }); } public function address() { return $this->hasOne(Address::class); } public function setAddressAttribute($address) { $this->setHasOneItem('address', $address); } }
要创建带有地址的用户,只需以下内容
$user->create([ 'name' => 'John Doe', 'email' => 'john.doe@example.com', 'address' = [ 'number' => '18', 'street' => 'rue Scribe', 'city' => 'Nantes', 'country' => 'France', ], ]);
在 update() 方法中传递一个 address 数组也将更新用户的地址。
Routing\Middleware\AreRelated
AreRelated 中间件允许您检查两个路由资源是否相关。它目前仅与 HasOneOrMany/BelongsTo 关系一起工作。
用法
在您的 app/Http/Kernel.php 中,在 $routeMiddleware 数组中添加以下行
'areRelated' => \StartupPalace\LaravelHelpers\Routing\Middleware\AreRelated::class,
然后,让我们假设我们有两个模型 Channel 和 Message
use \Illuminate\Database\Model; class Channel extends Model { // } class Message extends Model { public function channel() { return $this->belongsTo(Channel::class); } }
然后,在您的路由中
Route::resource('channel.message', 'MessageController');
因为您的资源和您的关联具有相同的名称(channel 和 message),您可以将中间件添加到您的资源路由中,以确保您尝试访问的消息属于其频道。
Route::resource('channel.message', 'MessageController') ->middleware('areRelated:channel,message');