вторник, 11 июля 2017 г.

LARAVEL. ИСПОЛЬЗОВАНИЕ МОДЕЛЕЙ. ЧАСТЬ 1.

Модель — объект определенного класса, в свойствах которого отображаются данные полей таблицы.
Модели находятся в папке app.
Имя модели должно быть в единственном числе и совпадать с таблицей БД.



Создадим модель через консоль: php artisan make:model Page

Если мы создаем модель, то мы можем сразу создать миграцию к данной модели, т.е таблицу в БД.
php artisan make:model Test --migration
или записать в более короткой форме: php artisan make:model Test —m


Родительская модель описана по адресу:
vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php

Рассмотрим свойства, которые можно переопределять в классе модели.
protected $table = 'articles'; // указываем имя таблицы БД. Это необязательное свойство, если имя модели совпадает с именем таблицы.

protected $primaryKey = 'id'; // По умолчанию это id. Если это не так, то нужно указать поле.

public $incrementing = FALSE; // Автоинкремент.

public $timestamps = FALSE; // Если не нужно хранить дату создания и обновления.

Как выбирать данные из базы?
Откроем контроллер \app\Http\Controllers\Admin\Core.php

Подключим модель: use App\Article;

Получим все статьи:
public function getArticles() {
$articles = Article::all();
dump($articles);
}

Метод
all() возвращает коллекцию моделей. В свойстве attributes возвращаются наши поля из БД.

Чтобы получить доступ непосредственно к данным?
Можно обойти в цикле данную коллекцию.
public function getArticles() {
$articles = Article::all();

// в цикле мы пройдемся по отдельным моделям
foreach($articles as $article) {
echo $article->name.'<br />';
}

dump($articles);
}
Выводит имена статей.

Используем конструктор запросов:
Выберем статьи, у которых id больше 3.

public function getArticles() {
$articles = Article::where('id', '>', 3)->get();

dump($articles);
}


Или комбинируем методы:
public function getArticles() {
$articles = Article::where('id', '>', 3)->orderBy('name')->take(2)->get();

dump($articles);
}
Запрос: "select * from `articles` where `id` > ? order by `name` asc limit 2"


Используем порционную выборку:
Article::chunk(2, function($articles) {

});

Выбор одной определенной записи:
public function getArticles() {
$articles = Article::
find(1); // выборка записи с id = 1
echo $articles->text; // выводит текст записи
dump($articles);
}
Запрос: "select * from `articles` where `articles`.`id` = ? limit 1"

Выберем одну запись другим методом:
public function getArticles() {
$articles = Article::where('id', 1)->first();
echo $articles->text;
dump($articles);
}
С методом find мы можем передать массив идентификаторов.
Это вернет коллекцию моделей.
public function getArticles() {
$articles = Article::find([1,2,3]);

dump($articles);
}
Запрос: "select * from `articles` where `articles`.`id` in (?, ?, ?)"


Используем метод findOrFail
public function getArticles() {
$articles = Article::
findOrFail(1);

dump($articles);
}
Запрос:
"select * from `articles` where `articles`.`id` = ? limit 1"

Если мы попробуем найти статью, которой нет, то будет сгенерированно исключение:
No query results for model [App\Article] 100

Аналог findOrFail - firstOrFail
public function getArticles() {
$articles = Article::where('id', 1)->
firstOrFail();

dump($articles);
}
Запрос: "select * from `articles` where `id` = ? limit 1"

Создадим новую запись. Вставим запись в БД.
public function getArticles() {
$article = new Article; // создадим объект новой модели
$article->name = 'New Article'; // запишем значение в поле имя
$article->text = 'New Article Text'; // запишем значение в поле text
$article->img = 'new.jpg';
$article->
save(); // сохраним данные в БД

$articles = Article::all(); // выберем все статьи
dump($articles);
}

Запрос: "insert into `articles` (`name`, `text`, `img`) values (?, ?, ?)"

Обновим информацию в БД. Метод save() пересохранит данные.
 public function getArticles() { 
 $article = Article::find(13); // без new, т.к мы создаем не пустую модель
 $article->name = 'New Article2'; // переопределим значения
 $article->text = 'New Article Text2'; 
 $article->img = 'new2.jpg'; 
 $article->save(); // сохраним данные в БД
 
 $articles = Article::all(); // выберем все статьи
        dump($articles);
    }
Запрос: "update `articles` set `name` = ?, `text` = ?, `img` = ? where `id` = ?"

Комментариев нет:

Отправить комментарий

Materialize-css. Футер

Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html