2017-02-14 20 views
1

Я получаю это сообщение об ошибке с отношениями, но я не могу выяснить, что мне нужно сделать, чтобы остановить эту ошибку.OcotberCMS - «SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец« users.application_id »

у меня есть модель приложения с контроллером и компонентом. в интерфейсе можно добавить новую запись приложений. Но для просмотра я получаю сообщение об ошибке.

"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'users.application_id' in 'where clause' (SQL: select * from `users` where `users`.`deleted_at` is null and `users`.`application_id` = 1 and `users`.`application_id` is not null limit 1)" on line 662 of /srv/users/sssandwich/apps/website/public/vendor/laravel/framework/src/Illuminate/Database/Connection.php 

Я изолировал ошибку появляться, когда я добавить этот код в полях.ямл Acme \ Models \ Application \ fields.yaml.

# =================================== 
# Form Field Definitions 
# =================================== 

fields:   
    client: 
     label: Client 
     type: relation 
     disabled: true 
     select: concat(name, ' ', surname) 
     span: left 

В

Acme\Models\Application.php 

У меня есть отношения, установленные в качестве

/** 
    * @var array Relations 
    */ 
    public $hasOne = [ 
    'client' => ['RainLab\User\Models\User', 'table' => 'users'], 
    'cv' => ['Acme\Acme\Models\Cv'] 
    ]; 
    public $hasMany = []; 
    public $belongsTo = [ 
    'owner' => ['Backend\Models\User'] 
    ]; 

Ниже представлена ​​структура базы данных ...

public function up() 
{ 
    Schema::create('acme_acme_applications', function(Blueprint $table) { 
     $table->engine = 'InnoDB'; 
     $table->increments('id'); 
     $table->string('jobs_id')->nullable()->index(); 
     $table->string('application_id')->nullable()->index(); 
     $table->string('owner_id')->nullable()->index(); 
     $table->string('user_id')->nullable()->index(); 
     $table->string('vacancy_id')->nullable()->index(); 
     $table->string('ref_no', 50)->nullable(); 
     $table->char('status_update')->nullable(); 
     $table->timestamps(); 
    }); 
} 

Я grep'd 'APPLICATION_ID' и он появляется только в структуре db. Таблица пользователей - плагин Rainlab User, но я не уверен, почему он пытается найти application_id в этой таблице.

+0

Удалите отношения клиента hasOne в вашем приложении, похоже, что он пытается слишком много развернуть. Или вместо этого вместо этого добавьте ключи. – aynber

+0

Thankyou, но если я удалю клиент hasOne, то он не отобразит имя пользователя, отправившего приложение. Но я не знаю, почему он ищет application_id. – ServerSideSkittles

+0

Возможно, это попытка вытащить клиента приложения. Попробуйте добавить ключи к клиенту (id как внешний ключ, user_id - как локальный ключ). Я не знаю формат, поэтому я не уверен, как вы его добавили. – aynber

ответ

3
"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'users.application_id'... 

Я думаю, что эта ошибка само-пояснительная предполагается Применение модели иметь application_id внешний ключ, потому что вы определили One-To-One Relation;

, если приложение-One User, то таблица Пользователя должна включать application_id колонку:

public $hasOne = [ 
    'client' => [ 
    'RainLab\User\Models\User', 
    'table' => 'users', 
    'key' => 'application_id', // the foreign key in User's table 
    'otherKey' => 'id', // Model record id 
     ], 
    ]; 

и вы должны определить обратную связь в модели пользователя, пользователь belongsTo

public $belongsTo = [ 
    'application' => [ 
    'Acme\Models\Application', 
    'table' => 'acme_acme_applications', 
    'key' => 'application_id', 
    'otherKey' => 'id', 
     ], 
    ]; 

Если вы не хотите напрямую редактировать плагин RainLab User (изменения будут потеряны во время обновлений), посмотрите here, как он расширяет плагин и добавляет несколько столбцов в базу данных.