2016-01-27 2 views
3

Я конвертирую свое приложение Zend Framework 1 в приложение Laravel. Я использовал Доктрину, поэтому я переместил модели в Laravel. Я использую laravel-doctrineInvalidFieldNameException с использованием Laravel 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

ответ

4

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

+0

Кто это сказал? Я написал пакет, почему бы мне дать недействительный ответ? –

+0

Понятия не имею, кто проиграл. Это действительно так. Спасибо – raygo

+0

Я сделал. В первоначальном вопросе не было указано, что лучи использовали доктрину laravel. Таким образом, ответом на вопрос, предполагающий другую структуру, была причина. Я удалил downvote теперь, когда вопрос соответствует правильному ответу. Надеюсь ты понимаешь. – Michael

0

Snake case стиль по умолчанию для имен столбцов для многих структур. Вы можете указать имя столбца таблицы вашей собственности:

/** @Column(type="string", length=255, name="companyName", nullable=true) */ 
private $companyName; 

Вы можете изменить общую стратегию именования, see the docs for that. Laravel не поддерживает его из коробки, но относительно мало изменений, необходимых для make it work. Если вы не хотите связываться со своим кодом Laravel, есть также drop-in replacement for Doctrine, у которого есть эта функция и многие другие встроенные.

+0

Поскольку я мигрирующие модели, у меня есть много полей, которые мне нужно будет сделать. Удивление, если есть более простой способ, поэтому мне не придется добавлять дополнительные аннотации ко всем моим моделям. Спасибо – raygo

+0

Да, я обновил ответ. – Michael

+0

Я видел этот url, но эта конфигурация отличается от laravel-doctrine – raygo