gpt4 book ai didi

php - Laravel 5 数据库播种中的命名冲突

转载 作者:可可西里 更新时间:2023-11-01 01:00:29 24 4
gpt4 key购买 nike

我在运行我的数据库种子(以及其他控制台命令)时遇到了命名冲突。

我的所有模型都存储在 app/Models 目录中,并且位于 App\Models 命名空间中。此目录中有一个名为 Model.php 的基本模型,它扩展了 laravel 基本模型。

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model as BaseModel;

abstract class Model extends BaseModel {}

我的一些模型扩展了这个基类,例如

<?php namespace App\Models;

class User extends Model {}

我的一些模型直接扩展了 eloquent 模型,例如

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Sport extends Model {}

当通过 http 访问我的应用程序时,这工作正常,并且没有命名冲突。但是,当我尝试运行控制台命令(例如 db:seed)时,出现以下错误:

PHP Fatal error:  Cannot use Illuminate\Database\Eloquent\Model as Model because the name is already in use in /home/vagrant/Code/wisletics/app/Models/Sport.php on line 3

我最初的猜测是 laravel 以某种方式编译种子文件,这导致了冲突。有没有人有任何想法,或者是否有其他人已经遇到过这个问题?

最佳答案

问题在

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Sport extends Model {}

这会产生一个问题,因为您已经有了 App\Models\Model,现在当 PHP 尝试获取 Sport 的父类时(Model),它无法决定您实际上是在请求 App\Models\Model 还是 Illuminate\Database\Eloquent\Model

这个问题其实可以改成:

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model as BaseModel;

class Sport extends BaseModel {}

更新:您为什么在播种时看到这个?嗯,Laravel 5 使用 PSR-4,它不会加载你的任何模型,直到它被请求,当你试图运行 SportTableSeeder 时会发生这种情况。

关于php - Laravel 5 数据库播种中的命名冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28619435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com