Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте все
Мой первый пост - просьба о помощи.
Начал изучать Laravel. Первый день, фактически. Надергал книг (.pdf), выбор для начала пал на "Getting Started with Laravel 4" - небольшая книжица, но мне показалось, что ухватить смысл этого фреймворма она должна помочь.
Первые упражнения были ОК, пока не дошел до создания миграций (стр. 37).
Проблема: Сначала создается две модели (два класса Eloquent - Cat и Breed - кошки и их породы), из которых посредством php artisan migrate:make add_cats_and_breeds_table в папке migrations, как вам гораздо лучше меня известно, должен получиться соответствующий файл. Сначала файл не создавался, но после поисков решения проблемы в сети, это удалось преодолеть (сейчас, после перезагрузки компутера, переключения на др. проект и переключения снова на этот, эта проблемка возникла снова - я просто забыл, как она была решена - не страшно, найду снова) - больше беспокоит другое, над чем провозился несколько часов, но бестолку: файл этот содержал практически пустые тела функций up() и down(), хотя в моделях определяется структура этих тренировочных таблиц, что и должно найти отражение в файле миграции. Короче, система artisan словно не видит этих двух моделей с их данными. В чем может быть дело?
Спасибо.
ЗЫ. ОС - Убунту 14.04 , PHP Version 5.5.9-1ubuntu4.3
Изменено DimCI (24.07.2014 20:13:10)
Не в сети
Наверное, я недостаточно хорошо описал проблему, поскольку вижу примерно полтора десятка просмотров, не считая моих, но предложений нет. ОК, опишу пошагово.
Композитора установил, фреймворк - тоже. Находится он в директории с другими проектами, поэтому устанавливался так:
composer create-project laravel/laravel www/cats --prefer-dist
где www - директория для создаваемых и поддерживаемых сайтов, cats - данный проект
Я подробно это описываю, поскольку мелькнула мысль о том, что расположение проекта в особой директории и название его НЕ "laravel" (как было бы, если бы не указал www/cats) требует для полностью нормальной работы изменений каких-то переменных, о которых я не знаю. Может ли такое быть? Это, выходит, вопрос №1.
Далее - настройка проекта -permissions директории storage и ее содержимого, настроек БД... - запустилось под LAMP всем вам известное You have arrived - первому этапу конец, значит.
Взялся за книжку, указанную выше. Знакомство с синтаксисом routes и проч., тут вопросов нет. Дальше следуют миграции, в которые все и уперлось.
Значит, так: первым делом переходим в директорию проекта:
$ cd www/cats
Создаем файл app/models/Cat.php :
class Cat extends Eloquent {
protected $fillable = array('name', 'date_of_birth', 'breed_id');
public function getDates() {
return array('date_of_birth', 'created_at', 'updated_at');
}
public function breed(){
return $this->belongsTo('Breed');
}
}
и файл app/models/Breed.php:
class Breed extends Eloquent {
public $timestamps = false;
public function cats(){
return $this->hasMany('Cat');
}
}
из которых команда
$ php artisan migrate:make add_cats_and_breeds_table
,
согласно автору, должна создать в app/database/migrations/ файл со следующим содержимым:
use Illuminate\Database\Migrations\Migration;
class Initial extends Migration {
public function up(){
Schema::create('cats', function($table){
$table->increments('id');
$table->string('name');
$table->date('date_of_birth');
$table->integer('breed_id')->nullable();
$table->timestamps();
});
Schema::create('breeds', function($table){
$table->increments('id');
$table->string('name');
});
}
public function down(){
Schema::drop('cats');
Schema::drop('breeds');
}
}
но у меня получается лишь такое содержимое:
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddCatsAndBreedsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
Я так понимаю, что следующим шагом должно быть:
$ php artisan migrate
что должно создать 2 соответствующие таблицы в БД ит.д., но до этого не дошло.
...Потому что для меня что-то не дошло? Или...:( ?
Другая непонятка, о которой вера вскользь упомянул, заключается в том, что если после
$ cd www/cats
я делаю
php artisan serve
и получаю соответствующее сообщение, то после этого попытка выполнения
$ php artisan migrate:make add_cats_and_breeds_table
и др. команд вообще ничего не дает - никакой реакции в терминале с сообщениями о ходе выполнения, никаких файлов не создается - глухо, короче... Так и должно быть или...?
Помогите, пожалуйста.
я еще экспериментировал с
$ php artisan migrate:make add_cats_and_breeds_table
в виде добавления аргументов типа --create --table=... (кстати, можно только одну таблицу таким образом определить, верно?), но ничего позитивного не получается
Не в сети
- но у меня получается лишь такое содержимое:
Все правильно у вас получается, создается пустой файл миграции, в котором вы задаете структуру. Параметр --create --table= указывает миграции имя таблицы в бд. Заготовки миграций лежат в /vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs, ознакомьтесь.
Может будет полезна эта тема
Изменено Cheshirrski (25.07.2014 11:37:21)
Не в сети
}%>>но у меня получается лишь такое содержимое:
Все правильно у вас получается, создается пустой файл миграции, в котором вы задаете структуру. Параметр %%--create --table=%% указывает миграции имя таблицы в бд. Заготовки миграций лежат в /vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs, ознакомьтесь.
Может будет полезна ((http://laravel.ru/forum/viewtopic.php?id=414 эта тема))
Спасибо.
Хм... А я из текста понял, что для этого система использует написанные чуть раньше моделей. По крайней мере, там не пишется ничего типа "сами, ручками..." или что-то вроде того...
Не в сети
Cheshirrski пишет:}%>>но у меня получается лишь такое содержимое:
Все правильно у вас получается, создается пустой файл миграции, в котором вы задаете структуру. Параметр %%--create --table=%% указывает миграции имя таблицы в бд. Заготовки миграций лежат в /vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs, ознакомьтесь.
Может будет полезна ((http://laravel.ru/forum/viewtopic.php?id=414 эта тема))Спасибо.
Хм... А я из текста понял, что для этого система использует написанные чуть раньше моделей. По крайней мере, там не пишется ничего типа "сами, ручками..." или что-то вроде того...
Действительно, зачем тогда модели, написанные таким вот образом?
Если мы пишем, например
public $timestamps = false;
то неужели это я пишу ДЛЯ СЕБЯ САМОГО? Чтобы не забыть через минуту, что не надо поля с датами в таблице создавать? Странно. Как по мне, это выглядит именно как написанное для программы, которая, обнаружив отрицательную переменную, не генерирует соотв. поля в таблице... Не было ли именно так задумано изначално все-таки, как думаете?
Не в сети
Миграции надо писать руками. Из коробки в laravel не предусмотрено ничего, что бы эту вещь автоматизировано. в up() и down() пишешь команды создания и удаления изменений в БД при помощи http://laravel.com/docs/schema . Как именно выглядит файл миграции можно посмотреть на гитхабе у какого-нить ларавеловского проекта.
Генерация миграций из моделей невозможна, так как в моделях мы не перечисляем аттрибуты.
$timestamps в модели ты пишешь не для себя, а для фреймворка - чтобы он понимал, что в created_at и updated_at можно что-то писать при создании / сохранении модели. Иначе, даже если эти столбцы в бд будут, фреймворк туда писать ничего не будет.
Не в сети
Миграции надо писать руками. Из коробки в laravel не предусмотрено ничего, что бы эту вещь автоматизировано. в up() и down() пишешь команды создания и удаления изменений в БД при помощи http://laravel.com/docs/schema . Как именно выглядит файл миграции можно посмотреть на гитхабе у какого-нить ларавеловского проекта.
Генерация миграций из моделей невозможна, так как в моделях мы не перечисляем аттрибуты.$timestamps в модели ты пишешь не для себя, а для фреймворка - чтобы он понимал, что в created_at и updated_at можно что-то писать при создании / сохранении модели. Иначе, даже если эти столбцы в бд будут, фреймворк туда писать ничего не будет.
Спасибо.
Чего -то я не догоняю, значит. С чего тогда этот ларавель на руках носят? Я же пока вижу не упрощение жизни, а совсем наоборот...
Надо все-таки дальше повникать, наверное - не может же быть так, что я один в белом, а все остальные... того...
Не в сети
- Надо все-таки дальше повникать, наверное — не может же быть так, что я один в белом, а все остальные… того…
Ну, не вы один такой.
Не в сети
С чего тогда этот ларавель на руках носят? Я же пока вижу не упрощение жизни, а совсем наоборот.
А где может быть упрощение жизни ? Генерация миграций по модели ? Так в этом случае все равно придется писать руками описания столбцов, не в миграции так в модели, плюс пропадет версионность - с помощью миграций можно править структуру БД в процессе разработки приложения, а с помощью изменений в модели - нет.
Миграции вообще вещь необязательная, если приложение пишете только вы, то вы смело можете без них обойтись, просто рисуя таблицы в phpmyadmin. Миграции нужны для того, чтобы можно было фиксировать изменения БД в системе контроля версий (например, git), особенно когда работаешь в команде.
PS если нужно генерировать миграцию по существующей таблице, то для этого есть вот такой инструмент: https://github.com/Xethron/migrations-generator
Изменено slider23 (26.07.2014 00:45:50)
Не в сети
Страницы 1