Всем привет, кто читает мою статью. Создадим проект, начальную базу для дальнейшей работы. Используемые программные средства: • IDE - Sublime Text. • Laragon Wamp 4.0. • Git. • Laravel 5.5. • Bootstrap 4. Используемые дополнительные библиотеки: • ((https://laravelcollective.com/docs/5.4/html laravelcollective/html - v 5.4)). • ((http://image.intervention.io/getting_started/installation intervention/image - v 2.4)). • ((https://github.com/stechstudio/Laravel-PHP-CS-Fixer stechstudio/laravel-php-cs-fixer — v 1.0)). Так же при написании проекта в помощь будем использовать: • ((https://github.com/alexeymezenin/laravel-best-practices/blob/master/russian.md#%D0%A1%D0%BE%D0%B1%D0%BB%D1%8E%D0%B4%D0%B0%D0%B9%D1%82%D0%B5-%D1%81%D0%BE%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0 "Хорошие практики Laravel")). Далее выполняем пункт 1 тестового задания - ничего сложного: //- Модель User без кастомных полей.// Создаются по умолчанию миграции. //- Модель Article с полем text.// Создаем миграцию: >php artisan make:migration CreateArticlesTable --create=articles В созданной миграции в методе up() опишем создаваемые поля: %%(php) class CreateArticlesTable extends Migration { public function up() { Schema::create('articles', function (Blueprint $table) { $table->increments('id'); $table->string('title')->default('none'); $table->string('text'); $table->timestamps(); }); } ... } %% После этого применяем наши миграции: >php artisan migrate //- Относятся как многие ко многим.// Т.к. отношение многие ко многим, то для начала создадим дополнительную таблицу "article_user" в БД : >php artisan make:migration CreateArticleUserTable --create=article_user В созданной миграции в методе up() опишем создаваемые поля необходимые для отношения многие ко многим: %%(php) class CreateArticleUserTable extends Migration { public function up() { Schema::create('article_user', function (Blueprint $table) { $table->increments('id'); $table->unsignedInteger('user_id')->default(1); $table->foreign('user_id')->references('id')->on('users'); $table->unsignedInteger('article_id')->default(1); $table->foreign('article_id')->references('id')->on('articles'); $table->timestamps(); }); } ... } %% Применяем нашу миграцию. //- Написать свойство articles в первой модели, которое вернёт все статьи пользователя.// Добавляем метод articles в нашу модель User: %%(php) class User extends Authenticatable { use Notifiable; protected $fillable = [ 'name', 'email', 'password' ]; protected $hidden = [ 'password', 'remember_token', ]; public function articles() { return $this->belongsToMany('App\Article', 'article_user')->withTimestamps(); } ... } %% //- Написать метод users во второй, который вернёт всех авторов статьи.// Здесь необходимо создать модель Articles. >php artisan make:model Article Уже после этого добавляем свойство users: %%(php) class Article extends Model { protected $fillable = [ 'id', 'text', 'title', 'created_at' ]; public function users() { return $this->belongsToMany('App\User', 'article_user')->withTimestamps(); } ... } %% А вот наши методы в действии (соответственно): **user_articles.blade.php** %%(php)

{{ $title }}: {{ $user->name }}

{{ __('site.but_return_main') }}

@if ($user->articles) @foreach ($user->articles as $article)

{{ $article->title }}

{{{ str_limit($article->text, $limit = 250, $end = '...') }}}

@if ($auth_user && $article->isAuthor($auth_user))
  • {{ __('site.but_edit') }}
  • {{ Form::open(['method' => 'DELETE','route' => ['articles.destroy', $article->id],'style'=>'form-inline']) }} {{ csrf_field() }} {{ Form::submit(__('site.but_delete'), ['class' => 'btn btn-default btn-sm btn-back']) }} {{ Form::close() }}
@endif
@endforeach @else

{{ __('site.no_articles') }}

@endif
%% **../articles/index.blade.php** %%(php)
@if ($articles) @foreach ($articles as $article)

{{ $article->title }}

{{{ str_limit($article->text, $limit = 250, $end = '...') }}}

@if ($auth_user && $article->isAuthor($auth_user))
  • {{ __('site.but_edit') }}
  • {{ Form::open(['method' => 'DELETE','route' => ['articles.destroy', $article->id],'style'=>'form-inline']) }} {{ csrf_field() }} {{ Form::submit(__('site.but_delete'), ['class' => 'btn btn-default btn-sm btn-back']) }} {{ Form::close() }}
@endif
@endforeach @else

{{ __('site.no_articles') }}

@endif
%% Ссылка на ((https://github.com/vol-mir/larablog.test Git)). Далее ((https://laravel.ru/posts/1058 Часть 3))