Intereting Posts
Объединение строк в виде массива из другой таблицы для каждой строки Получить все имена FUNCTIONS из всех CONTROLLERS в Codeigniter Symfony2 – определить, находится ли пользователь в защищенном брандмауэре Как выбирать случайным образом с доктриной Объединение двух массивов в виде пар ключевых значений в PHP Лучший способ найти последний вставленный идентификатор в mysql, используя php Как изменить хранилище иерархии ролей в Symfony2? Как прочитать список файлов из папки с помощью PHP? Как очистить кеш браузера при повторной загрузке изображения с тем же именем файла, в php? Готовый отчет PHP PDO – запрос MySQL LIKE Переменные переменной PHP с ключом массива как я могу использовать часовой пояс в фильтре даты Twig? Как выполнить поиск из поля сериализации в базе данных mysql? Библиотека PHP. Вычислите ограничивающий прямоугольник для заданного местоположения lat / lng. Помощь синтаксического анализа XML с помощью DOMDocument

Autogenerate классы моделей с Laravel 4 (также используя существующую базу данных с L4)

Я разработал свою базу данных в MySQL Workbench и установил все мои внешние ключи и т. Д.

Я хочу использовать эту схему БД с Laravel 4, однако из документов нет слов о любой способности работать с существующим набором таблиц базы данных. С моей точки зрения, другие структуры, такие как Cake с его «выпечкой», позволяют автоматически создавать классы моделей на основе таблиц, уже имеющихся в вашей базе данных.

Я огляделся повсюду и не вижу ничего подобного для Laravel 4. Самое близкое, что я нашел, это комплект генератора Джеффри Пути для ремесленника, однако это только создает базовую модель и не обнаруживает установленных отношений внешнего ключа ,

Возможно ли это с Laravel 4, или мне придется делать все это вручную?

Solutions Collecting From Web of "Autogenerate классы моделей с Laravel 4 (также используя существующую базу данных с L4)"

Хорошей новостью является то, что Антонио только что закончил свой MySQL WorkBench в Eloquent ORM converter. Это прекрасное решение, но мне приходит конец, но может вам очень помочь.

Обновление: ссылка не работает в данный момент. В wabpage говорится: «Мы переделываем вещи, скоро вернемся!». Я уже отправил Антонио по электронной почте, спрашивая его, когда эта услуга будет доступна снова.

Антонио сказал, что он вернется, но нет приблизительного времени прибытия. Нам нужно подождать..

cakePHP отлично справляется с разработкой всего проекта из схемы DB уже на месте. В настоящее время Laravel не поддерживает ничего подобного. Одна из второстепенных функций все еще удерживает меня от принятия laravel.

Хм, у меня была такая же проблема, и я написал небольшой скрипт, который генерирует базовые классы и решает проблемы внешнего ключа. Это базовое решение и определяет отношения «hasOne», которые вам, возможно, придется изменить на hasMany позже. Я использовал контроллер и создаю свой шаблон кода в представлении:

контроллер:

namespace Admin; /** * just a quick helper to generate model classes * from mysql to Eloquent style ones.. * @author Mario */ class ModelController extends \BaseController { /** * save Classes in folder of choice * * @return void */ public function create($folder) { $sql = "SELECT * FROM information_schema.tables WHERE table_schema = 'UR_SCHEMA'"; $tables = \DB::select($sql); $sql2 = "select * from information_schema.`KEY_COLUMN_USAGE` where constraint_schema = 'UR_SCHEMA' order by table_name"; $keys = \DB::select($sql2); $meta = $this->sortOutMetadata($keys); foreach ($tables as $table) { $metaData = null; if(!empty($meta[$table->TABLE_NAME])){ $metaData = $meta[$table->TABLE_NAME]; } $code = \View::make('model.start', array('table' => $table, 'meta' => $metaData))->render(); file_put_contents($folder.DIRECTORY_SEPARATOR.ucfirst(camel_case($table->TABLE_NAME).'.php'), $code); } } /** * provide structure indexed by table * * @param type $keys * @return type */ private function sortOutMetadata($keys) { $return = array(); foreach ($keys as $key) { if ($key->CONSTRAINT_NAME == 'PRIMARY') { $return[$key->TABLE_NAME]['pk'] = $key->COLUMN_NAME; } elseif (!empty($key->REFERENCED_TABLE_NAME)) { //one way $return[$key->TABLE_NAME]['fk'][] = array('column' => $key->COLUMN_NAME, 'refColumn' => $key->REFERENCED_COLUMN_NAME, 'refTable' => $key->REFERENCED_TABLE_NAME,); //and the other $return[$key->REFERENCED_TABLE_NAME]['fk'][] = array('column' => $key->REFERENCED_COLUMN_NAME, 'refColumn' => $key->COLUMN_NAME, 'refTable' => $key->TABLE_NAME,); } } return $return; } } 

Мой шаблон шаблона (в основном мой шаблон шаблона)

 <?php echo '<?php'; ?> namespace Model\Base; use Model\Model; class <?php echo ucfirst(camel_case($table->TABLE_NAME));?> extends Model { /** * @var String */ protected $table = '<?php echo $table->TABLE_NAME;?>'; <?php if (isset($meta['pk'])):?> /** * @var String */ protected $primaryKey = '<?php echo $meta['pk'];?>'; /** * attributes not writable from outside * @var mixed */ protected $guarded = array('<?php echo $meta['pk'];?>'); <?php endif;?> /** * Timestamps we dont want here * @var Boolean */ public $timestamps = false; <?php if (isset($meta['fk'])):?> <?php foreach($meta['fk'] as $keys):?> /** * @return HasOne */ public function <?php echo camel_case($keys['refTable']);?>() { return $this->hasOne('Model\<?php echo ucfirst(camel_case($keys['refTable']));?>', '<?php echo $keys['refColumn'];?>', '<?php echo $keys['column'];?>'); } <?php endforeach;?> <?php endif;?> } 

Затем просто создайте базовые классы, предоставив им папку: (откуда бы вы ни выбрали)

 $controller = new \Admin\ModelController(); $controller->create(__DIR__ . DIRECTORY_SEPARATOR . 'tmpModel'); 

Это дало мне неплохой способ получить мои базовые классы Auto, созданные так, как мне было нужно. Помните, что вам нужно увидеть схему information_schema с вашим пользователем db.

Надеюсь это поможет