InvalidFieldNameException 使用 Laravel 原则
InvalidFieldNameException using Laravel Doctrine
我正在将 Zend Framework 1 应用程序转换为 Laravel 应用程序。我使用的是 Doctrine,所以我将模型移到了 Laravel。我正在使用 laravel-doctrine
字段是用驼峰式写的,当通过 doctrine 创建数据库时,它们也是用驼峰式创建的,像这样:
/**
* @ORM\Entity (repositoryClass="Repositories\Customer")
* @ORM\Table(name="customers")
* @ORM\HasLifecycleCallbacks
*/
class Customer
{
/**
* @ORM\Id @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/** @ORM\Column(type="string", length=255, nullable=true) */
protected $firstName;
/** @ORM\Column(type="string", length=255, nullable=true) */
protected $lastName;
/** @ORM\Column(type="string", length=255, nullable=true) */
protected $companyName;
当我执行 EntityManager::find('App\Entities\Customer', 1);
时出现此错误:
An exception occurred while executing 'SELECT t0.id AS id_1,
t0.firstName AS firstName_2, t0.lastName AS lastName_3,
t0.company_name AS company_name_4, t0.email AS email_5,
t0.phone_number AS phone_number_6, t0.type AS type_7, t0.created AS
created_8, t0.updated AS updated_9, t0.jobsource_id AS jobsource_id_10
FROM customers t0 WHERE t0.id = ?' with params 1: SQLSTATE[42S22]:
Column not found: 1054 Unknown column 't0.company_name' in 'field
list'
寻找下划线是有原因的吗?我有办法改变它吗?
我正在使用 PHP 7.0.1
Snake case 是许多框架的默认列名称样式。您可以通过 属性:
指定 table 列名称
/** @Column(type="string", length=255, name="companyName", nullable=true) */
private $companyName;
您可以更改整体命名策略,see the docs for that. Laravel doesn't support it out of the box, but it is relatively few changes needed to make it work。
如果您不想弄乱您的 Laravel 代码,还有具有此功能的 drop-in replacement for Doctrine 以及更多 built-in.
laraveldoctrine.org支持定义自定义命名策略:
Doctrine\ORM\Mapping\DefaultNamingStrategy可能就是你要找的那个
在 doctrine.php 配置文件中:(在您将其发布到您的项目之后)
'managers' => [
'default' => [
'naming_strategy' => 'Doctrine\ORM\Mapping\DefaultNamingStrategy',
'dev' => env('APP_DEBUG'),
'meta' => env('DOCTRINE_METADATA', 'annotations'),
'connection' => env('DB_CONNECTION', 'mysql'),
'paths' => [
base_path('app')
],
....
]
]
如果你想要一个自定义的,根据以下实施命名策略:http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/namingstrategy.html
我正在将 Zend Framework 1 应用程序转换为 Laravel 应用程序。我使用的是 Doctrine,所以我将模型移到了 Laravel。我正在使用 laravel-doctrine
字段是用驼峰式写的,当通过 doctrine 创建数据库时,它们也是用驼峰式创建的,像这样:
/**
* @ORM\Entity (repositoryClass="Repositories\Customer")
* @ORM\Table(name="customers")
* @ORM\HasLifecycleCallbacks
*/
class Customer
{
/**
* @ORM\Id @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/** @ORM\Column(type="string", length=255, nullable=true) */
protected $firstName;
/** @ORM\Column(type="string", length=255, nullable=true) */
protected $lastName;
/** @ORM\Column(type="string", length=255, nullable=true) */
protected $companyName;
当我执行 EntityManager::find('App\Entities\Customer', 1);
时出现此错误:
An exception occurred while executing 'SELECT t0.id AS id_1, t0.firstName AS firstName_2, t0.lastName AS lastName_3, t0.company_name AS company_name_4, t0.email AS email_5, t0.phone_number AS phone_number_6, t0.type AS type_7, t0.created AS created_8, t0.updated AS updated_9, t0.jobsource_id AS jobsource_id_10 FROM customers t0 WHERE t0.id = ?' with params 1: SQLSTATE[42S22]: Column not found: 1054 Unknown column 't0.company_name' in 'field list'
寻找下划线是有原因的吗?我有办法改变它吗?
我正在使用 PHP 7.0.1
Snake case 是许多框架的默认列名称样式。您可以通过 属性:
指定 table 列名称/** @Column(type="string", length=255, name="companyName", nullable=true) */
private $companyName;
您可以更改整体命名策略,see the docs for that. Laravel doesn't support it out of the box, but it is relatively few changes needed to make it work。 如果您不想弄乱您的 Laravel 代码,还有具有此功能的 drop-in replacement for Doctrine 以及更多 built-in.
laraveldoctrine.org支持定义自定义命名策略:
Doctrine\ORM\Mapping\DefaultNamingStrategy可能就是你要找的那个
在 doctrine.php 配置文件中:(在您将其发布到您的项目之后)
'managers' => [
'default' => [
'naming_strategy' => 'Doctrine\ORM\Mapping\DefaultNamingStrategy',
'dev' => env('APP_DEBUG'),
'meta' => env('DOCTRINE_METADATA', 'annotations'),
'connection' => env('DB_CONNECTION', 'mysql'),
'paths' => [
base_path('app')
],
....
]
]
如果你想要一个自定义的,根据以下实施命名策略:http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/namingstrategy.html