Propel Создание проекта -- использование. Пример на русском

Предположим, что интересующей нас базы ещё не существует.

В корне проекта (там же, где и ранее) создадим файл schema.xml с подобным содержимым (читайте комментарии в xml стиле), в котором находится описание таблиц и связей между ними:


<?xml version="1.0" encoding="UTF-8"?>
<database name="bookstore" defaultIdMethod="native">
    <table name="book" phpName="Book"> <!--  таблица книг  -->
        <!--  описываем поля таблицы -->
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
        <column name="title" type="varchar" size="255" required="true" />
        <column name="isbn" type="varchar" size="24" required="true" phpName="ISBN"/>
        <column name="publisher_id" type="integer" required="true"/>
        <column name="author_id" type="integer" required="true"/>
        <!--  описываем внешний ключ  -->
        <foreign-key foreignTable="publisher" phpName="Publisher" refPhpName="Book">
            <reference local="publisher_id" foreign="id"/>
        </foreign-key>
        <foreign-key foreignTable="author">
            <reference local="author_id" foreign="id"/>
        </foreign-key>
    </table>

    <table name="author" phpName="Author"> <!--  таблица авторов  -->
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
        <column name="first_name" type="varchar" size="128" required="true"/>
        <column name="last_name" type="varchar" size="128" required="true"/>
    </table>

    <table name="publisher" phpName="Publisher"> <!--  таблица издателей  -->
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
        <column name="name" type="varchar" size="128" required="true" />
    </table>
</database>

Генерируем SQL по .xml схеме

После чего выполняем команду:

propel sql:build 

На винде может потребоваться её альтернатива:

"vendor/bin/propel" sql:build

Генерируем PHP классы по .xml схеме

Там же выполняем:

propel model:build

(или "vendor/bin/propel" model:build )
Файл будут созданы в диреткории generated-classes/ изменять (добавлять собственные методы)
следует только файл модели (напр. Book.php) и файл запросов (напр. BookQuery.php)
-- остальные файлы будут перезаписываться при повторной генерации модели.

Генерируем файл для подлючения к БД во время работы

Для ускорения работы ORM Propel необходимо выполнить ещё одну команду:

"vendor/bin/propel" config:convert

которая создаст (скорее всего в отдельной директории) на основе созданного выше propel.php (конфигурационного файла) файл для подключения к СУБД

Выполняем сгенерированный SQL - разворачиваем таблицы

Команда:

"vendor/bin/propel" sql:insert

Внимание: данный скрипт удалит (с содержимым) существующие таблицы (те что указаны в scheme.xml) и создаст новые, учитывайте это при обновлении схемы.

Чтобы обновить структуру базы после изменения схемы, используйте последоватльено две команды из приведенных выше:

sql:build 
sql:insert

Подключаем и используем в PHP

После всех проведённых выше действий, загрузить propel можно скриптом формата:

<?php

// включаем автозагрузку (которую даёт композер)
require_once '/path/to/vendor/autoload.php';

// подключаем Propel
require_once '/generated-conf/config.php';