Laravel 5.4 — многие ко многим — выберите форму — ссылка на базу данных

Я практикую Laravel и создаю блог для активного отдыха.

У меня есть таблица сообщений, в которой описываются праздники, а затем таблица мероприятий, в которой просто указано название мероприятия. У меня есть таблица соединений, которая связывает их. Эти две таблицы имеют отношение многие ко многим. То, чего я пытаюсь добиться, это то, что я хотел бы добавить 1 или более действий в таблицу, используя форму выбора при добавлении сообщений. В настоящее время он не регистрирует таблицу действий, а создает сообщения в моем блоге.

Буду благодарен за любые советы и помощь

Смотрите мой код ниже:

// App \ ActivityController

<?php
namespace App\Http\Controllers;

use App\Activity;
use Illuminate\Http\Request;

class ActivityController extends Controller
{
protected $fillable = [
'activity_name'
];

public function posts()
{
return $this->belongsToMany('App\Post')->using('App\activityPost')->withTimestamps();

}
public function index(Activity $activity)
{
$posts = $activity->posts;
return view('posts.index', compact('posts'));
}

public function edit(Activity $activity)
{

$posts = App\Post::get()->pluck('title','body','id')->sortBy('title');
return view('activities.edit', compact('activities', 'posts'));
}
public function update(Request $request, Activity $activity)
{

$activity->update($request->all());
$activity->posts()->sync($request->posts);
return redirect ('posts/create');
}
public function create()
{

return view('activities.create');
}

public function store()
{
$activity = new Activity;
$activity->activity_name = request('activity_name');
$activity->save();
return redirect('activities/create');
}

public function show(Activity $activity)
{
return view ('activities.activity', ['Activity'=>$activity]);
}
}?>

// App \ PostController

<?php
namespace App\Http\Controllers;

use App\Post;
use Carbon\Carbon;
use Illuminate\Http\Request;class PostController extends Controller
{

public function __contruct()
{
$this->middleware('auth')->except(['index', 'show']);
}
public function index()
{
$posts = Post::latest()->get();

return view('posts.index', compact('posts'));
}

public function show(Post $post)

{
return view('posts.show', compact('post'));
}

public function create()
{
$activities = \App\Activity::pluck('activity_name', 'activity_name');
return view('posts.create', compact('activities'));}

public function store(Request $request)
{
$this->validate(request(), [
'title' => 'required',
'body' => 'required',

]);
Post::create([
'title' =>request('title'),
'body' =>request('body'),
'user_id' => auth()->id()
]);return redirect('/');
}
public function activities()
{
return $this->belongsToMany('App\Activity')->using('App\activityPost');
}
public function update(Request $request, Post $post)
{
$post->update($request->all());
$post->activities()->sync($request->activities);
return redirect('post');
}}

?>

//App\Post.php

<?php
namespace App;

class Post extends Model

{public function countries()
{
return $this->hasMany(Country::class);
}
public function comments()
{
return $this->hasMany(Comment::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
public function addComment($body)
{
$this ->comments()->create(compact('body'));
}
public function activities()
{
return $this->belongsToMany('App\Activity');
}}

?>

// App \ Activity.php

<?php
namespace App;class Activity extends Model
{
protected $table = 'activities';
protected $fillable = ['activity_name'];

public function posts()
{
return $this->belongsToMany('App\Post');
}
public function index()
{
$activities = Activity::orderBy('activity_name', 'asc')->paginate(10);
return view('activities.index', ['activities'=>$activities]);
}
public function store()
{
return $this->belongsToMany('App\Post');
}public function getRouteKeyName()
{
return 'activity_name';
}

public function create()
{
return view ('activities.create');
}}?>

// Routes \ web.php

<?phpRoute::get('/', 'PostController@index')->name('home');
Route::get('/posts/create', 'PostController@create');
Route::post('/posts', 'PostController@store');
Route::get('/posts/{post}', 'PostController@show');
Route::resource('posts', 'PostController');

Route::get('/about', 'AboutController@index');

Route::get('/logout', 'LoginController@destroy');

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Route::post('posts/{post}/comments', 'CommentController@store');

Route::get('/posts/activities/{activity}', 'ActivityController@index');
Route::resource('activities', 'ActivityController');
Route::get('/activities/create', 'ActivityController@create');
Route::post('/activities', 'ActivityController@store');
Route::get('/activities/{activity}', 'ActivityController@show');
Route::put('/posts/create', 'ActivityController@update');

?>

// resources \ views \ posts.create.blade.php

<form method="POST" action="/posts">

{{csrf_field() }}

<div class="form-group">
<label for="title">Name</label>
<input type="text" class="form-control" id="title" name="title" required>
</div>

<div class="form-group">
<label for="body">Description</label>
<textarea name="body" id="body" class="form-control" required></textarea>
</div><!-- create form with select multiple
convert activity into array --><div class="form-group">
<label for="activities">Select your Activity</label>
<select class="form-control" name="activities" size="{{$activities->count()}}" required multiple>
@foreach ($activities as $activity)
<option value="activities">
{{$activity}}
</option>
@endforeach
</select>
</div><div class="form-group">
<button type="submit" class="btn btn-primary">Publish</button>
</div>

</form>

// ActivityPost Table

  public function up()
{
if(!Schema::hasTable('activity_post')) {
Schema::create('activity_post', function (Blueprint $table)      {
$table->integer('activity_id')->unsigned()->index();
$table->foreign('activity_id')->references('id')->on('activities')->onDelete('cascade');

$table->integer('post_id')->unsigned()->index();
$table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');

});
}
}

// Таблица активности

  public function up()
{
if(!Schema::hasTable('activities')) {
Schema::create('activities', function (Blueprint $table) {
$table->increments('id');
$table->string('activity_name');
$table->timestamps();
});
}
}

// Стол сообщений

public function up()
{
if(!Schema::hasTable('posts')){
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
$table->string('title');
$table->text('body');
$table->timestamps();
});
}
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector