Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Propel, czyli wydajna i wygodna obsługa baz danych w PHP5

Podstawowe operacje na obiektach

Gdy już skonfigurujemy środowisko uruchomieniowe, przejdziemy do najciekawszej części: obiektowego zarządzania danymi w DB. Na początku, utwórzmy nowy rekord w tabeli wydawców. Spójrzmy na Listing 4. Przedstawiamy na nim przykład wstawiania i modyfikowania rekordu w pojedynczej tabeli. Obie operacje są obsługiwane przez jedną metodę: $obiekt->save(). Propel sam zadba o wygenerowanie wartości dla klucza pierwotnego oraz przygotowanie odpowiedniej instrukcji SQL - INSERT lub UPDATE, w zależności od tego, czy tworzymy nowy wpis w DB, czy uaktualniamy już istniejący. Kasowanie zbędnych danych jest równie proste: wystarczy wywołanie metody delete().

Jak widzimy, kod wykonujący podstawowe operacje na obiektach jest nieskomplikowany i można go napisać bardzo szybko. Zauważmy jednak, że do skasowania lub zaktualizowania rekordu w DB potrzebny jest nam obiekt reprezentujący ten rekord. Przyjrzyjmy się więc sposobom pobierania obiektów, czyli odpowiednikom SQL-owej komendy SELECT.

Najłatwiejsze jest wydostanie pojedynczego rekordu, w przypadku gdy dysponujemy odpowiadającą mu wartością klucza pierwotnego. W takim przypadku dostępna jest statyczna metoda ObiektPeer::retrieveByPK($id), gdzie $id może być zarówno pojedynczą wartością (dla klucza pierwotnego zdefiniowanego w jednym polu), jak i tablicą.

Przy pobieraniu wielu rekordów spełniających określone założenia możemy skorzystać z mechanizmu kryteriów. Jest to w pewnym sensie obiektowy język definiowania zapytań o obiekty. Mamy w tym celu dostępne dwie klasy: Criteria i Criterion. Sposób korzystania z nich przedstawiamy na Listingu 5, na którym pokazujemy przykłady dla wszystkich omawianych sposobów pobierania danych. Klasa Criteria zawiera całe zapytanie, na które składają się warunki dotyczące danych (Criterion) i inne parametry sterujące (np. limit wierszy do zwrócenia). Najłatwiej myśleć o obiekcie klasy Criteria jako odpowieniku pełnej instrukcji SELECT. Criterion z kolei to odpowiednik jednego warunku w części WHERE instrukcji SELECT. Warunki jednostkowe można łączyć w bardziej skomplikowane struktury, w efekcie otrzymując nowy obiekt typu Criterion. Criteria API to nowe narzędzie w naszych rękach i będziemy musieli poświęcić trochę czasu na jego naukę, a zapamiętanie tych dwóch prostych reguł pomoże rozpocząć pracę z nim.

Choć ten obiektowy język zapytań pozwala na wyrażenie wielu warunków, istnieją sytuacje, w których będziemy musieli odwołać się do starego, sprawdzonego SQL-a. Na szczęście Propel umożliwia wykonywanie zapytań niskopoziomowych, czyli kwerend SQL-owych (Listing 5).

Listing 1. Najprostszy sposób obsługi przykładowego formularza

<?php
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
    die('Nie mogę się połączyć do DB: ' . mysql_error());
}
$db_selected = mysql_select_db('bookstore', $link);
if (!$db_selected) {
    die('Nie mogę użyć DB "bookstore": ' . mysql_error());
}

//Wydawca
$sql = 'INSERT INTO publisher (name) VALUES '.'("'.mysql_escape_string($_POST['publisher_name']).'")';
$result = mysql_query($sql);
if (!$result) {
    die(mysql_error());
}
$publisher_id = mysql_insert_id();

//Autor
$sql = 'INSERT INTO author (first_name, last_name) VALUES '.'("'.mysql_escape_string($_POST['firs_name']).'","' .mysql_escape_string($_POST['last_name']).'")';
$result = mysql_query($sql);
if (!$result) {
    die(mysql_error());
}
$author_id = mysql_insert_id();

//Książka
$sql = 'INSERT INTO book (publisher_id, author_id, title, isbn)'.'VALUES '.'('.$publisher_id.','.$author_id.','.'"'.mysql_escape_string($_POST['title']).'","'.mysql_escape_string($_POST['isbn']).'")';
$result = mysql_query($sql);
if (!$result) {
    die(mysql_error());
}
$book_id = mysql_insert_id();
mysql_close($link);
echo "Dodano książkę o ID: $book_id";
?>

Listing 2. Obsługa przykładowego formularza w Propel

<?php
$old_inc_path = ini_get('include_path');
ini_set('include_path',$old_inc_path.';F:/www/phpsolmag/propel/propel-1.0.0/runtime/classes');
require_once('propel/Propel.php');
Propel::init(dirname(__FILE__).'/conf/bookstore-conf.php');

include_once 'bookstore/Publisher.php';
include_once 'bookstore/Author.php';
include_once 'bookstore/Book.php';

$pub = new Publisher();
$pub->setName($_POST['publisher_name']);

$author = new Author();
$author->setFirstName($_POST['firs_name']);
$author->setLastName($_POST['last_name']);

$book = new Book();
$book->setTitle($_POST['title']);
$book->setIsbn($_POST['isbn']);
$book->setPublisher($pub);
$book->setAuthor($author);
$book->save(); 
?>
Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (0)
Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2017 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System