Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 24.07.2014 20:09:41

Модели и миграции

Здравствуйте все wink

Мой первый пост - просьба о помощи.

Начал изучать Laravel. Первый день, фактически. Надергал книг (.pdf), выбор для начала пал на "Getting Started with Laravel 4" - небольшая книжица, но мне показалось, что ухватить смысл этого фреймворма она должна помочь.

Первые упражнения были ОК, пока не дошел до создания миграций (стр. 37).

Проблема: Сначала создается две модели (два класса Eloquent - Cat и Breed - кошки и их породы), из которых посредством php artisan migrate:make add_cats_and_breeds_table в папке migrations, как вам гораздо лучше меня известно, должен получиться соответствующий файл. Сначала файл не создавался, но после поисков решения проблемы в сети, это удалось преодолеть (сейчас, после перезагрузки компутера, переключения на др. проект и переключения снова на этот, эта проблемка возникла снова - я просто забыл, как она была решена wink - не страшно, найду снова) - больше беспокоит другое, над чем провозился несколько часов, но бестолку: файл этот содержал практически пустые тела функций up() и down(), хотя в моделях определяется структура этих тренировочных таблиц, что и должно найти отражение в файле миграции. Короче, система artisan словно не видит этих двух моделей с их данными. В чем может быть дело?

Спасибо.

ЗЫ. ОС - Убунту 14.04 , PHP Version 5.5.9-1ubuntu4.3

Изменено DimCI (24.07.2014 20:13:10)

Не в сети

#2 25.07.2014 11:15:19

Re: Модели и миграции

Наверное, я недостаточно хорошо описал проблему, поскольку вижу примерно полтора десятка просмотров, не считая моих, но предложений нет. ОК, опишу пошагово.

Композитора установил, фреймворк - тоже. Находится он в директории с другими проектами, поэтому устанавливался так:

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=...  (кстати, можно только одну таблицу таким образом определить, верно?), но ничего позитивного не получается sad

Не в сети

#3 25.07.2014 11:34:37

Cheshirrski
masterМастер
Откуда: Днепр
Сообщений: 116
Статей: 2

Re: Модели и миграции

  1. но у меня получается лишь такое содержимое:

Все правильно у вас получается, создается пустой файл миграции, в котором вы задаете структуру. Параметр --create --table= указывает миграции имя таблицы в бд. Заготовки миграций лежат в /vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs, ознакомьтесь.
Может будет полезна эта тема

Изменено Cheshirrski (25.07.2014 11:37:21)

Не в сети

#4 25.07.2014 12:42:31

Re: Модели и миграции

Cheshirrski пишет:

}%>>но у меня получается лишь такое содержимое:
Все правильно у вас получается, создается пустой файл миграции, в котором вы задаете структуру. Параметр %%--create --table=%% указывает миграции имя таблицы в бд. Заготовки миграций лежат в /vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs, ознакомьтесь.
Может будет полезна ((http://laravel.ru/forum/viewtopic.php?id=414 эта тема))

Спасибо.

Хм... А я из текста понял, что для этого система использует  написанные чуть раньше моделей. По крайней мере, там не пишется ничего типа "сами, ручками..." или что-то вроде того...

Не в сети

#5 25.07.2014 13:39:29

Re: Модели и миграции

DimCI пишет:
Cheshirrski пишет:

}%>>но у меня получается лишь такое содержимое:
Все правильно у вас получается, создается пустой файл миграции, в котором вы задаете структуру. Параметр %%--create --table=%% указывает миграции имя таблицы в бд. Заготовки миграций лежат в /vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs, ознакомьтесь.
Может будет полезна ((http://laravel.ru/forum/viewtopic.php?id=414 эта тема))

Спасибо.

Хм... А я из текста понял, что для этого система использует  написанные чуть раньше моделей. По крайней мере, там не пишется ничего типа "сами, ручками..." или что-то вроде того...

Действительно, зачем тогда модели, написанные таким вот образом?

Если мы пишем, например

public $timestamps = false;

то неужели это я пишу ДЛЯ СЕБЯ САМОГО? Чтобы не забыть через минуту, что не надо поля с датами в таблице создавать? Странно. Как по мне, это выглядит именно  как написанное для программы, которая, обнаружив отрицательную переменную, не генерирует соотв. поля в таблице... Не было ли именно так задумано изначално все-таки, как думаете?

Не в сети

#6 25.07.2014 17:04:07

Re: Модели и миграции

Миграции надо писать руками. Из коробки в laravel не предусмотрено ничего, что бы эту вещь автоматизировано. в up() и down() пишешь команды создания и удаления изменений в БД при помощи http://laravel.com/docs/schema . Как именно выглядит файл миграции можно посмотреть на гитхабе у какого-нить ларавеловского проекта.
Генерация миграций из моделей невозможна, так как в моделях мы не перечисляем аттрибуты.

$timestamps в модели ты пишешь не для себя, а для фреймворка - чтобы он понимал, что в created_at и updated_at можно что-то писать при создании / сохранении модели. Иначе, даже если эти столбцы в бд будут, фреймворк туда писать ничего не будет.

Не в сети

#7 25.07.2014 19:10:10

Re: Модели и миграции

slider23 пишет:

Миграции надо писать руками. Из коробки в laravel не предусмотрено ничего, что бы эту вещь автоматизировано. в up() и down() пишешь команды создания и удаления изменений в БД при помощи http://laravel.com/docs/schema . Как именно выглядит файл миграции можно посмотреть на гитхабе у какого-нить ларавеловского проекта.
Генерация миграций из моделей невозможна, так как в моделях мы не перечисляем аттрибуты.

$timestamps в модели ты пишешь не для себя, а для фреймворка - чтобы он понимал, что в created_at и updated_at можно что-то писать при создании / сохранении модели. Иначе, даже если эти столбцы в бд будут, фреймворк туда писать ничего не будет.

Спасибо.

Чего -то я не догоняю, значит. С чего тогда этот ларавель на руках носят? Я же пока вижу не упрощение жизни, а совсем наоборот...

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

Не в сети

#8 25.07.2014 19:32:12

Re: Модели и миграции

  1. Надо все-таки дальше повникать, наверное — не может же быть так, что я один в белом, а все остальные… того… ;)

Ну, не вы один такой.

Не в сети

#9 26.07.2014 00:41:42

Re: Модели и миграции

С чего тогда этот ларавель на руках носят? Я же пока вижу не упрощение жизни, а совсем наоборот.

А где может быть упрощение жизни ? Генерация миграций по модели ? Так в этом случае все равно придется писать руками описания столбцов, не в миграции так в модели, плюс пропадет версионность - с помощью миграций можно править структуру БД в процессе разработки приложения, а с помощью изменений в модели - нет.

Миграции вообще вещь необязательная, если приложение пишете только вы, то вы смело можете без них обойтись, просто рисуя таблицы в phpmyadmin. Миграции нужны для того, чтобы можно было фиксировать изменения БД в системе контроля версий (например, git), особенно когда работаешь в команде.

PS если нужно генерировать миграцию по существующей таблице, то для этого есть вот такой инструмент: https://github.com/Xethron/migrations-generator

Изменено slider23 (26.07.2014 00:45:50)

Не в сети

Подвал раздела