спасибо, не догадался сразу это сделать. Тут меня ругали за статические методы в модели, а какой смысл их делать "не статическими" ?@AllReady, timezone устанавливается один раз. В настройках. В случае laravel - config/app.php . Ну, если юзер не настраивает таймзоны под себя конечн...
Нет. Мне все больше нравится подход со специальными Request классами. Есть специальная папка для них - app/Http/RequestsP.S. правильнее будет заменить получение данных с формы дописав use App\Http\Requests; и получать данные при помощи Request::input() ?
<?php
namespace App\Http\Requests\Clients;
use App\Http\Requests\Request;
class ClientCreateRequest extends Request
{
public function rules()
{
return [
'name' => 'required',
'ownersEmail' => 'required|email',
'administrator_id' => 'required|integer',
];
}
/**
* @return string
*/
public function getName()
{
return $this->get('name');
}
/**
* @return string
*/
public function getOwnersEmail()
{
return $this->get('ownersEmail');
}
/**
* @return int
*/
public function getAdministratorId()
{
return $this->get('administrator_id');
}
}
public function store(ClientCreateRequest $request)
{
...
$request->getOwnersEmail();
...
}
Спасибо. Буду пробовать. А сколько вообще таких методов в ларавеле, чтобы передавать данные с форм ? И еще, я пользовался классом DB чтобы выполнить определенный запрос, а как обычный запрос с join'ом произвести в eloquent ? Примеры смотрел, у меня на выходе получается нереально большой массив (или объект, уже не помню)Нет. Мне все больше нравится подход со специальными Request классами. Есть специальная папка для них - app/Http/Requests
Ну со стороны кажется ненужным оверкодингом... но мне все больше и больше нравится. Почти нет магических строк в коде.
$posts = Post::join('users', 'posts.user_id', '=', 'users.id')
->select('users.name', 'posts.title', 'posts.subtitle', 'posts.user_id', 'posts.date_create', 'posts.url')
->getQuery()
->get();
$post = Post::firstOrFail($id);
$post->user->name; // фреймворк сам подтянет по связи юзеров
foreach($post->comments as $comment) {
echo $comment->title, // подтянули коммент
' ',
$comment->user->name; // подтянули у коммента пользователя.
}
А зачем это настраивать и менять ее на бэкенде, если фронтенд уже обладает этими данными?Ну, если юзер не настраивает таймзоны под себя конечн...
Это при условии, что ты от фронта получаешь таймзону пользователя при сохранении данных, иначе ты сохранишь не то время.А зачем это настраивать и менять ее на бэкенде, если фронтенд уже обладает этими данными?
К тому же изменения часовых поясов или неправильный выбор пользователя не будут влиять.
Вот на уровне вьюхи ларавела и надо просто добавить к span, содержащим дату, определенный класс.@Absinthe, мне нравится этот подход. Но на уровне топик стартера именно laravel является и фронтэндом и бэкэндом.
Бэкенду не нужно знать таймзону совсем.Это при условии, что ты от фронта получаешь таймзону пользователя при сохранении данных, иначе ты сохранишь не то время.
It depends. Например, фича «не беспокоить ночью».Бэкенду не нужно знать таймзону совсем.
В том числе и приложения вроде календарей ее должны знать.It depends. Например, фича «не беспокоить ночью».
Ну так правильно, дефолтная зона для приложения должна быть UTC, а пользовательскую применяем только когда нужно. А ТС выставлял москальскую таймзону да ещё в каждом месте использования карбона.А зачем это настраивать и менять ее на бэкенде, если фронтенд уже обладает этими данными?
Не лучше ли на бэкенде работать с UTC, а на клиенте формировать правильные даты?
К тому же изменения часовых поясов или неправильный выбор пользователя не будут влиять.
Это же тоже относится к Eloquent ?в доке почитаешь как пользоваться with
Вот из Ваших слов я понял следующее: у каждой таблицы с которой мы собираемся работать, есть своя модель ? Где как раз таки описываются свойства (из ларавела понял еще то, что данные которые пользователю не нужны ставят приватными) и методы, чтобы получить данные с этой таблицы, обновить, удалить и т.д. ?@AllReady, ты неправильно понимаешь, что такое модель. Не ты один, это типичное заблуждение среди php разработчиков, я когда-то тоже неправильно понимал.
Модель это не то, что работает с базой Это вообще нерелевантно. Посмотри в словаре определение слова "модель". Вот и в программировании то же самое, модель - это некоторое идеализированное представление какой-то вещи в виде объекта на ООП-языке. Условно говоря - есть пользователь, у него есть имя и email, и он умеет менять свой емейл на другой. Соответственно, есть класс User, у которого есть свойства name, email, и метод changeEmail($newEmail). Пока про хранение в базе вообще не говорим, представим себе что пока базы нет и все хранится в оперативной памяти. Пока надо понимать, что ООП это работа не с неструктурированными массивами, а с классами и объектами, и на уровне моделей каждый класс - это программное представление какой-то сущности.
Соответственно, далее идет вопрос о том, как объекты сохранять в базу и наоборот доставать оттуда. В любом случае нам надо сопоставить свойства объектов с полями и таблицами в базе, а с этим знанием уже генерировать sql-запросы и разбирать результаты выборок, заполняя ими свойства объектов и наоборот. Есть два подхода - засунуть работу с базой и правила сопоставления внутрь модели (это называется Active Record), или сделать это отдельно (это называется Data Mapper). У AR есть масса недостатков, о которых можно поговорить как-нибудь в другой раз, но для простых контентных проектов, где мало бизнес-логики, вполне годится. В Laravel реализован Active Record, называется Eloquent.
Как в Laravel выглядит работа с AR, показал @AmdY в предыдущем комментарии. Почитай документацию, это важная вещь, надо это понять и освоить.
Class Chat extends Model {
// функции, получить все сообщения, по отдельности, удаление и т.д.. в общем то что нам нужно
public function getAll() {
return select('select * from chat');
}
}
Я вообще не имел ввиду что у таблицы есть модели. Я имею ввиду что каждая модель закреплена за таблицейУ таблиц нет моделей… Таблицы это вообще что-то из области хранения данных. Модель - это само приложение. Его логика.