kirkbushell / eloquence

A drop-in library for certain database functionality in Laravel, that allows for extra features that may never make it into the main project.
MIT License
537 stars 60 forks source link

model::create() MenuModel::query must return a relationship instance. #111

Closed Joycezhangw closed 6 months ago

Joycezhangw commented 6 months ago

version:8.0.0

model::create();
declare(strict_types=1);

namespace App\Services\Models\System;

use App\Services\Models\BaseModel;
use App\Services\Models\Manage\RoleModel;
use Eloquence\Behaviours\CamelCasing;

class MenuModel extends BaseModel
{
    use CamelCasing;
    /**
     * 表名
     * @var string
     */
    protected $table = 'sys_menu';

    /**
     * 主键字段
     * @var string
     */
    protected $primaryKey = 'menu_id';

    /**
     * 指示是否自动维护时间戳
     * @var bool
     */
    public $timestamps = true;

    /**
     * 模型日期列的存储格式。
     * @var string
     */
    protected $dateFormat = 'U';

    protected $fillable = [
        'menuId',
        'parentId',
        'name',
        'title',
        'icon',
        'module',
        'type',
        'redirect',
        'path',
        'parentId',
        'component',
        'authCode',
        'orderNo',
        'keepAlive',
        'hidden',
        'createdAt',
        'updatedAt'
    ];

    public function fakeRelationship()
    {
        return 'nothing';
    }

    /**
     * 强制转换的属性
     *
     * @var array
     */
    protected $casts = [
        'hidden' => 'boolean',
        'keep_alive' => 'boolean',
        'created_at' => 'datetime:Y-m-d H:i:s',
        'updated_at' => 'datetime:Y-m-d H:i:s',
    ];

    protected $hidden = [
        'pivot'
    ];

    /**
     * 角色绑定权限路由和按钮
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function roles()
    {
        return $this->belongsToMany(RoleModel::class, 'sys_manage_role_has_menu', 'menu_id', 'role_id');
    }
}
{
    "message": "App\\Services\\Models\\System\\MenuModel::query must return a relationship instance.",
    "exception": "LogicException",
    "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php",
    "line": 548,
    "trace": [
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php",
            "line": 491,
            "function": "getRelationshipFromMethod",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/kirkbushell/eloquence/src/Behaviours/CamelCasing.php",
            "line": 50,
            "function": "getRelationValue",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
            "line": 2029,
            "function": "getAttribute",
            "class": "App\\Services\\Models\\System\\MenuModel",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/genealabs/laravel-model-caching/src/Traits/ModelCaching.php",
            "line": 25,
            "function": "__get",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/genealabs/laravel-model-caching/src/Traits/Caching.php",
            "line": 179,
            "function": "__get",
            "class": "App\\Services\\Models\\BaseModel",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/genealabs/laravel-model-caching/src/Traits/Caching.php",
            "line": 102,
            "function": "makeCacheTags",
            "class": "App\\Services\\Models\\BaseModel",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/genealabs/laravel-model-caching/src/Traits/Caching.php",
            "line": 256,
            "function": "flushCache",
            "class": "App\\Services\\Models\\BaseModel",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/genealabs/laravel-model-caching/src/Traits/ModelCaching.php",
            "line": 62,
            "function": "checkCooldownAndFlushAfterPersisting",
            "class": "App\\Services\\Models\\BaseModel",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php",
            "line": 404,
            "function": "GeneaLabs\\LaravelModelCaching\\Traits\\{closure}",
            "class": "App\\Services\\Models\\BaseModel",
            "type": "::"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php",
            "line": 249,
            "function": "Illuminate\\Events\\{closure}",
            "class": "Illuminate\\Events\\Dispatcher",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/genealabs/laravel-pivot-events/src/Traits/ExtendFireModelEventTrait.php",
            "line": 46,
            "function": "dispatch",
            "class": "Illuminate\\Events\\Dispatcher",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
            "line": 1174,
            "function": "fireModelEvent",
            "class": "App\\Services\\Models\\BaseModel",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
            "line": 994,
            "function": "performInsert",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php",
            "line": 896,
            "function": "save",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Support/helpers.php",
            "line": 263,
            "function": "Illuminate\\Database\\Eloquent\\{closure}",
            "class": "Illuminate\\Database\\Eloquent\\Builder",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php",
            "line": 897,
            "function": "tap"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php",
            "line": 23,
            "function": "create",
            "class": "Illuminate\\Database\\Eloquent\\Builder",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
            "line": 2132,
            "function": "forwardCallTo",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/genealabs/laravel-model-caching/src/Traits/Caching.php",
            "line": 22,
            "function": "__call",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
            "line": 2144,
            "function": "__call",
            "class": "App\\Services\\Models\\BaseModel",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/app/Http/Controllers/Manage/V1/Menu.php",
            "line": 86,
            "function": "__callStatic",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "::"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
            "line": 54,
            "function": "store",
            "class": "App\\Http\\Controllers\\Manage\\V1\\Menu",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
            "line": 45,
            "function": "callAction",
            "class": "Illuminate\\Routing\\Controller",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
            "line": 262,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
            "line": 205,
            "function": "runController",
            "class": "Illuminate\\Routing\\Route",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 721,
            "function": "run",
            "class": "Illuminate\\Routing\\Route",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 128,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/app/Http/Middleware/AdminPermission.php",
            "line": 36,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "App\\Http\\Middleware\\AdminPermission",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/app/Http/Middleware/JWTRoleAuth.php",
            "line": 39,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "App\\Http\\Middleware\\JWTRoleAuth",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/app/Http/Middleware/ManageLog.php",
            "line": 50,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "App\\Http\\Middleware\\ManageLog",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
            "line": 50,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 103,
            "function": "handleRequest",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 55,
            "function": "handleRequestUsingNamedLimiter",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 103,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 723,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 698,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 662,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 651,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 167,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 128,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 40,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
            "line": 86,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 39,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 103,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 142,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 111,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/www/landao/landao-server/public/index.php",
            "line": 52,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        }
    ]
}
kirkbushell commented 6 months ago

You have not provided any details regarding what you're looking to achieve. Furthermore, this is not an Eloquence issue, but appears to be a mistake you've made elsewhere.