В файле App\Http\Controllers\Admin.php
Работа со связями Один к одному.
public function getArticles() {
$country = Country::find(1); $user = User::find(3); // выберем пользователя с id=3
// метод associate() используется для изменения связей между моделями
// метод associate() изменяет значение внешнего ключа
// Изменим состояние модели country:
$country->user()->associate($user); // в моделе country метод user реализует связь между таблицами
$country->save();
}
Идем в БД. Теперь к стране будем привязан пользователь с id=3.
id name user_id created_at updated_at
1 USA 3 NULL 2017-07-18 17:19:31
Связь Один ко многим.
Сделаем так, что все статьи добавит пользователь по id=3
public function getArticles() {
$articles = Article::all();
$user = User::find(3);
foreach($articles as $article) {
$article->user()->associate($user); // привяжем пользователя к статье
$article->save();
}
}
Связь Многие ко многим. Роли и пользователи. Здесь нет внешних ключей.
Внешние ключи располагаются в таблице role_user.
Назначим роль пользователю с id=3.
public function getArticles() {
$user = User::find(3);
$role_id = Role::find(2)->id; // Модератор
/*
Чтобы присоединить роль к пользователю вставкой записи в промежуточную таблицу,
которая присоединяется к моделям,
используйте метод attach():
*/
$user->roles()->attach($role_id);
}
В БД в таблицу role_user добавится новая запись.
Чтобы удалить запись отношения многие-ко-многим, используйте метод detach(). Метод detach() удалит соответствующую запись из промежуточной таблицы.
public function getArticles() {
$user = User::find(3);
$role_id = Role::find(2)->id; // Модератор
$user->roles()->detach($role_id);
}
Методы читатели и преобразователи.
Методы читатели или аксессорс - обращение к значению свойств модели.
Методы преобразователи или мутаторс - осуществляется изменение свойств модели.
Идем в модель app\Article.php
// У функций читателей сначала идет get в имени и потом идет Attribute. $value - значние свойства.
public function getNameAttribute($value) {
return 'Hello world - '.$value. ' - Hi!';
}
В файле App\Http\Controllers\Admin.php
public function getArticles() {
$article = Article::find(17); // статья с id=17
echo $article->name;
}
Идем в браузер: http://tlaravel.loc/articles
Возвращается: Hello world - Header17 — Hi!
Метод преобразователь.
Идем в модель app\Article.php
// В начале у методов преобразователей идет set. Он изменяет значение свойства.
public function setNameAttribute($value) {
// некий код
$this->attributes['name'] = '|'.$value.'|';
}
В файле App\Http\Controllers\Admin.php
Изменим свойство name модели Article.
public function getArticles() {
$article = Article::find(17); // статья с id=17
$article->name = 'Some text';
echo $article->name;
}
Идем в браузер: http://tlaravel.loc/articles
Возвращается: Hello world - |Some text| - Hi!
Закрытое свойство $casts определяет тип данных для каждого поля модели.
Преобразуем строковый заголовок в тип boolean.
Идем в модель app\Article.php
// определим массив типов данных для каждого поля модели
protected $casts = [
'name' => 'boolean'
];
В файле App\Http\Controllers\Admin.php
Изменим свойство name модели Article.
public function getArticles() {
$article = Article::find(17); // статья с id=17
echo $article->name;
}
Идем в браузер: http://tlaravel.loc/articles
Возвращается: 1
Рассмотрим тип преобразования array
Идем в модель app\Article.php
protected $casts = [
'name' => 'boolean',
'text' => 'array'
];
В файле App\Http\Controllers\Admin.php
Изменим существующую запись.
public function getArticles() {
$article = Article::find(17); // статья с id=17
$arr = ['key'=>'Hello wrold'];
$article->text = $arr;
$article->save();
}
Теперь в БД в данной ячейки статьи располагается сериализованный массив JSON:
17 Header17 {"key":"Hello wrold"} NULL 2017-07-16 16:54:33 2017-07-18 18:36:49 alias NULL 3
Если мы обратимся к этому полю:
public function getArticles() {
$article = Article::find(17); // статья с id=17
dump($article->text);
}
То выводится:
array:1 [▼
"key" => "Hello wrold"
]
Модель можно конвертировать в массив.
public function getArticles() {
$article = Article::find(17); // статья с id=17
dump($article->toArray());
}
Выводит:
array:9 [▼
"id" => 17
"name" => true
"text" => array:1 [▶]
"img" => null
"created_at" => "2017-07-16 16:54:33"
"updated_at" => "2017-07-18 18:36:49"
"alias" => "alias"
"deleted_at" => null
"user_id" => 3
]
Преобразуем в JSON:
public function getArticles() {
$article = Article::find(17); // статья с id=17
dump($article->toJson());
}
Выводит:
"{"id":17,"name":true,"text":{"key":"Hello wrold"},"img":null,"created_at":"2017-07-16 16:54:33","updated_at":"2017-07-18 18:36:49","alias":"alias","deleted_at": ▶"
Тот же результат будет, если мы приведем к строковому значению.
public function getArticles() {
$article = Article::find(17); // статья с id=17
dump((string)$article);
}
Выводит:
"{"id":17,"name":true,"text":{"key":"Hello wrold"},"img":null,"created_at":"2017-07-16 16:54:33","updated_at":"2017-07-18 18:36:49","alias":"alias","deleted_at": ▶"
Все методы для работы с коллекциями: https://laravel.com/docs/5.4/eloquent-collections
вторник, 18 июля 2017 г.
LARAVEL. ПРОЧИЕ МЕТОДЫ ПО РАБОТЕ СО СВЯЗЯМИ.
Подписаться на:
Комментарии к сообщению (Atom)
Materialize-css. Футер
Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html
-
Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html
-
Простое API. HTTP. Урок 1. Справка о методе PUT.
-
Класс Request - абстракция отправляемого запроса пользователя.
Комментариев нет:
Отправить комментарий