lukesnowden/relationship-macros

v0.0.7 2018-12-05 17:00 UTC

This package is auto-updated.

Last update: 2024-09-06 09:39:42 UTC


README

此特性允许您轻松为外键模型创建关系。

composer require lukesnowden/relationship-macros:^0.0.1

要允许在目标模型上使用,请使用特性 Lukesnowden\RelationshipMacros\Traits\Macro

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Lukesnowden\RelationshipMacros\Traits\Macro;

class Customer extends Model
{

    use Macro;
    
}

添加关系;

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Models\Customer;
use Some\Other\Models\Order;

class AppServiceProvider extends ServiceProvider
{

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
    
        Customer::relationshipMacro( 'orders', function() {
            return $this->hasMany( Order::class, 'customer_id' );
        });
        
    }
    
}

现在您可以使用 eloquent 和查询构建器原生地使用关系;

@if( $customer->orders->isEmtpy() )
    ...
@endif

You have {{ $customer->orders()->count() }} orders

您还可以使用整个类来存储您的关联,并一次性添加它们,请注意,所有方法都必须返回一个 Closure

<?php

class MyRelationships {
    
    public function orders() : \Closure
    {
        return function() {
            return $this->hasMany( Order::class, 'customer_id' );
        };
    }
    
}

Customer::relationshipMacros( new MyRelationships );

鸣谢

spatie/macroable

此特性是对 Macroable 包的修改版,用于与 Laravel 模型一起使用。

MIT 许可证

版权所有 © 2018 Luke Snowden

特此授予任何获得此软件及其相关文档副本(以下简称“软件”)的个人免费使用权,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许提供软件的个人进行上述操作,但需遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他法律,无论该索赔、损害或其他责任是否源于、因或与软件或软件的使用或其他交易有关。