Я начинаю с изучения связей таблицы базы данных в Laravel 5. Как cakePHPer что-то просто работает немного по-другому. Мой первый тест это ...Связи базы данных Laravel 5
Таблица, содержащая различные sql_types:
class ElementFieldType extends Model {
protected $fillable = ['name', 'sql_type'];
}
Таблица, содержащая поля, связанные с sql_types в ElementFieldType модели (element_field_type_id внешний ключ):
class ElementField extends Model {
protected $fillable = ['api', 'element_field_type_id', 'label', 'type'];
public function type() {
return $this->hasOne('App\Models\ElementFieldType');
}
}
В моем контроллере после обнаружения ElementField я хочу получить доступ к sql_type, используя:
$field = ElementField::find($id);
echo $field->type->sql_type;
Но я получаю ниже ошибки, что означает, что я могу сказать, что в элементе ElementFieldType должен быть ключ element_field_id, но это не может быть прав.
Что я делаю неправильно?
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'element_field_types.element_field_id'
in 'where clause' (SQL: select `sql_type` from `element_field_types`
where `element_field_types`.`element_field_id` = 1 and `element_field_types`.`element_field_id`
is not null limit 1)
База данных свалка:
CREATE TABLE `element_fields` (
`id` int(10) UNSIGNED NOT NULL,
`element_field_type_id` int(10) UNSIGNED NOT NULL,
`api` varchar(255) NOT NULL,
`label` varchar(255) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `element_field_types` (
`id` int(10) UNSIGNED NOT NULL,
`name` varchar(255) NOT NULL,
`sql_type` varchar(255) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `element_fields`
ADD PRIMARY KEY (`id`),
ADD KEY `element_fields_element_field_type_id_foreign` (`element_field_type_id`),
ADD KEY `element_fields_element_field_type_id_index` (`element_field_type_id`);
ALTER TABLE `element_field_types`
ADD PRIMARY KEY (`id`);
ALTER TABLE `element_fields`
ADD CONSTRAINT `element_fields_element_field_type_id_foreign` FOREIGN KEY (`element_field_type_id`) REFERENCES `element_field_types` (`id`);
Блестящий вы попали в проблему самостоятельно, всегда хорошо это делать :-) –