Laravel krok po kroku - część 6 - Eloquent

Paweł Mysior
25 lipca 2018

Eloquent to ORM Laravela oparty na modelu ActiveRecord. To brzmi skomplikowanie, ale w rzeczywistości Eloquent pozwala po prostu w bardziej przejrzysty sposób współpracować z tabelami w bazie danych. Stwórzmy model Eloquenta Post, najłatwiej będzie użyć komendy Artisana, wpiszmy w terminalu:

php artisan make:model Post

Ta komenda stworzyła plik app/Post.php z następującą treścią:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    //
}

Na pierwszy rzut oka klasa Post jest pusta. Ale istotne jest to, że dziedziczy po klasie Illuminate\Database\Eloquent\Model, która zawiera mnóstwo przydatnych metod.

Pobieranie danych

Użyjmy teraz tego modelu do pobrania danych z tabeli posts.

use App\Post;

$posts = Post::all();

Używamy instrukcji Post::all() do pobrania wszystkich wpisów z tabeli.

Każdy model Eloquenta pozwala nam używać metod query buildera, które poznaliśmy w poprzednim wpisie:

use App\Post;

$posts = Post::where('is_published', true)
    ->orderBy('created_at', 'desc')
    ->limit(10)
    ->get();

Możemy też pobrać konkretny wpis używając instrukcji where()->first() lub skrótowej metody find().

use App\Post;

$post = Post::where('id', 1)->first();
// lub
$post = Post::find(1);

Metoda find() wyszukuje rekord po kolumnie id.

Wstawianie danych

use App\Post;

$post = new Post;

$post->title = 'My first post';

$post->save();

Tworzymy nowy obiekt klasy Post, zapisujemy parametr title po czym zapisujemy go do bazy danych za pomocą metody save(). Wartości pól created_atupdated_at uzupełnią się automatycznie.

Innym sposobem jest użycie metody create() i przekazanie jej tablicy kolumn i wartości.

use App\Post;

Post::create([
    'title' => 'My first post',
    'body' => 'Lorem ipsum dolor sit amet',
]);

Jest tu jednak pewien haczyk. Laravel domyślnie broni nas przed tak zwanym mass-assignment. Wyobraźmy sobie, że zapisujemy do bazy danych pola z formularza rejestracji przesłanego przez użytkownika. Jeśli użytkownik doda do formularza pole, którego się nie spodziewaliśmy, może na przykład zmienić swój status w bazie danych. Zobaczmy to na przykładzie:

User::create($request->all());

Metoda $request->all() zwróci nam wszystkie pola z formularza. Domyślnie spodziewamy się tam na przykład adresu e-mail i hasła, ale użytkownik może tam dodać dowolne pole. Na przykład pole is_admin o wartości true.

W ten sposób nieświadomie zapisalibyśmy nowego użytkownika z flagą is_admin ustawiona na wartość true.

W każdym modelu możemy ustawić parametr $fillable równy tablicy pól, które mają być zapisywane w ten sposób:

// app/User.php
<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];
}

Każde pole, które nie znajdzie się w tej tablicy zostanie usunięte przy próbie zapisu metodą create().

Żeby móc zapisać tytuł i treść wpisu za pomocą metody create() ustawmy wartość pola $fillable w naszym modelu Post:

protected $fillable = ['title', 'body'];

Edytowanie danych

Metody save() możemy też użyć gdy chcemy edytować istniejący rekord:

use App\Post;

$post = Post::find(1);

$post->title = 'My first edited post';

$post->save();

Innym sposobem jest użycie metody query buildera update(), do której przekazujemy tablicę kolumn i wartości:

use App\Post;

Post::where('id', 1)->update([
    'title' => 'My first edited post',
]);;

Usuwanie danych

Rekordy z bazy danych usuwamy za pomocą metody delete() lub skrótowej metody destroy().

Post::find(1)->delete();
// lub
Post::destroy(1);

W tej części tutoriala dowiedzieliśmy się jak tworzyć i używać modeli Eloquenta. W następnej części nauczymy się definiować i używać relacji pomiędzy modelami Eloquenta.

Wygodny hosting zapewnia duet DigitalOceanLaravel Forge.
Copyright © laravelpolska.com

Drogi Użytkowniku!

Dalsze korzystanie z serwisu bez zmiany ustawień dotyczących cookies w przeglądarce oznacza akceptację plików cookies, co będzie skutkowało zapisywaniem ich na Twoich urządzeniach przez serwis internetowy laravelpolska.com. Jeśli nie wyrażasz zgody na przyjmowanie cookies, prosimy o zmianę ustawień w przeglądarce lub o opuszczenie serwisu. więcej

Stosujemy pliki cookies (tzw. ciasteczka) i inne pokrewne technologie, które mają na celu:

  • dostosowanie zawartości stron internetowych Serwisu do Twoich preferencji oraz optymalizacji korzystania ze stron internetowych; w szczególności pliki te pozwalają rozpoznać Twoje urządzenie i odpowiednio wyświetlić stronę internetową, dostosowaną do Twoich indywidualnych potrzeb;
  • utrzymanie Twojej sesji w Serwisie (po zalogowaniu), dzięki czemu nie musisz na każdej podstronie Serwisu ponownie wpisywać loginu i hasła,
  • zapewnienie bezpieczeństwa podczas korzystania z Serwisu,
  • ulepszenie świadczonych przez nas usług poprzez wykorzystanie danych w celach analitycznych i statystycznych,
  • poznanie Twoich preferencji na podstawie sposobu korzystania z naszych serwisów.

Wykorzystanie cookies pozwala nam zapewnić maksymalną wygodę przy korzystaniu z naszego Serwisu poprzez zapamiętanie Waszych preferencji i ustawień na naszych stronach. Więcej informacji o zamieszczanych plikach cookie oraz o możliwości zmiany ustawień przeglądarki oraz polityce przetwarzania danych znajdziesz w polityce prywatności.

Masz możliwość samodzielnej zmiany ustawień dotyczących cookies w swojej przeglądarce internetowej. Z poziomu przeglądarki internetowej, z której korzystasz, możliwe jest zarządzanie plikami cookies. W najpopularniejszych przeglądarkach istnieje m.in. możliwość:

  • zaakceptowania obsługi cookies, co pozwala na pełne korzystanie z opcji oferowanych przez witryny internetowe;
  • zarządzania plikami cookies na poziomie pojedynczych, wybranych przez użytkownika witryn;
  • określania ustawień dla różnych typów plików cookies, na przykład akceptowania plików stałych, jako sesyjnych itp.;
  • blokowania lub usuwania cookies.

Akceptuję pliki cookies