I received this error while trying to run two-layer loops in order to get a list out of an array:
Undefined property: Illuminate\Pagination\LengthAwarePaginator::$event_parts
I wanted to produce a table where it lists all my events and at the same time there is a column that listed all the attending participants.
Here is the phpmyadmin table:
Here is my EventController:
<?php
namespace App\Http\Controllers;
use App\Models\Event;
use Illuminate\Http\Request;
class EventController extends Controller
{
/**
* Display a listing of the resource.
*
* #return \Illuminate\Http\Response
*/
public function index()
{
$events = Event::paginate(5);
return view('events.index', compact('events'))
->with('i', (request()->input('page', 1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*
* #return \Illuminate\Http\Response
*/
public function create()
{
$events = Event::all();
return view('events.create', compact('events'));
##return view('events.create');
}
/**
* Store a newly created resource in storage.
*
* #param \Illuminate\Http\Request $request
* #return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'event_name' => 'required',
'event_start' => 'required',
'event_end' => 'required',
'event_category' => 'required',
#'event_part' => 'required'
]);
Event::create($request->all());
return redirect()->route('events.index')
->with('success', 'Event added successfully.');
}
/**
* Display the specified resource.
*
* #param \App\Models\Event $event
* #return \Illuminate\Http\Response
*/
public function show(Event $event)
{
return view('events.show', compact('event'));
}
/**
* Show the form for editing the specified resource.
*
* #param \App\Models\Event $event
* #return \Illuminate\Http\Response
*/
public function edit(Event $event)
{
return view('events.edit', compact('event'));
}
/**
* Update the specified resource in storage.
*
* #param \Illuminate\Http\Request $request
* #param \App\Models\Event $event
* #return \Illuminate\Http\Response
*/
public function update(Request $request, Event $event)
{
$request->validate([
'event_name' => 'required',
'event_start' => 'required',
'event_end' => 'required',
'event_category' => 'required'
]);
$event->update($request->all());
return redirect()->route('events.index')
->with('success', 'Event updated successfully');
}
/**
* Remove the specified resource from storage.
*
* #param \App\Models\Event $event
* #return \Illuminate\Http\Response
*/
public function destroy(Event $event)
{
$event->delete();
return redirect()->route('events.index')
->with('success', 'Event deleted successfully');
}
}
Here is my migration:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateEventsTable extends Migration
{
/**
* Run the migrations.
*
* #return void
*/
public function up()
{
Schema::create('events', function (Blueprint $table) {
$table->id('event_id');
$table->string('event_name');
$table->datetime('event_start');
$table->datetime('event_end');
$table->string('event_category');
$table->json('event_parts')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* #return void
*/
public function down()
{
Schema::dropIfExists('events');
}
}
Here is my index.blade.php:
#extends('layouts.app')
#section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Laravel 8 CRUD </h2>
</div>
<div class="pull-right">
<a class="btn btn-success" href="{{ route('events.create') }}" title="Create a event"> <i class="fas fa-plus-circle"></i>
</a>
</div>
</div>
</div>
#if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
#endif
<table class="table table-bordered table-responsive-lg">
<tr>
<th>No</th>
<th>Event Name</th>
<th>Event Start</th>
<th>Event End</th>
<th>Event Category</th>
<th>Event Participants</th>
<th width="280px">Action</th>
</tr>
#foreach ($events as $event )
<tr>
<td>{{ ++$i }}</td>
<td>{{ $event->event_name }}</td>
<td>{{ $event->event_start }}</td>
<td>{{ $event->event_end }}</td>
<td>{{ $event->event_category }}</td>
<td> #foreach ($events->event_parts as $event_part) {{ $event_part }} #endforeach</td>
<td>
<form action="{{ route('events.destroy', $event->event_id) }}" method="POST">
<a href="{{ route('events.show', $event->event_id) }}" title="show">
<i class="fas fa-eye text-success fa-lg">View</i>
</a>
<a href="{{ route('events.edit', $event->event_id) }}">
<i class="fas fa-edit fa-lg">Edit</i>
</a>
#csrf
#method('DELETE')
<button type="submit" title="delete" style="border: none; background-color:transparent;">
<i class="fas fa-trash fa-lg text-danger">Delete</i>
</button>
</form>
</td>
</tr>
#endforeach
</table>
{!! $events->links() !!}
#endsection
Related
i found out that these 2 lines cause the problem, but i don't know how to rewrite them to proceed
<a href="{{ route('categories.edit', $post->category->id ) }}">
{{ $post->category->name }}
</a>
Here is my posts/index.blade.php
#extends('layouts.app')
#section('content')
<div class="d-flex justify-content-end mb-2">
Add Post
</div>
<div class="card card-default">
<div class="card-header">Posts</div>
<div class="card-body">
#if ($posts->count()>0)
<table class="table">
<thead>
<th>Image</th>
<th>Title</th>
<th>Category</th>
<th></th>
<th></th>
<tbody>
#foreach($posts as $post)
<tr>
<td>
<img src="{{ asset('storage/'.$post->image) }}" width="120px" height="60px" alt="">
</td>
<td>
{{ $post->title }}
</td>
<td>
<a href="{{ route('categories.edit', $post->category->id ) }}">
{{ $post->category->name }}
</a>
</td>
#if($post->trashed())
<td>
<form action="{{ route('restore-posts', ['post' => $post['id']]) }}" method="POST">
#csrf
#method('PUT')
<button type="submit" class="btn btn-info btn-sm">Restore</button>
</form>
</td>
#else
<td>
Edit
</td>
#endif
<td>
<form action="{{ route('posts.destroy', ['post' => $post['id']]) }}" method="POST">
#csrf
#method('DELETE')
<button type="submit" class="btn btn-danger btn-sm">
{{ $post->trashed() ? 'Delete' : 'Trash' }}
</button>
</form>
</td>
</tr>
#endforeach
</tbody>
</thead>
</table>
#else
<h3 class="text-center">
No Posts Yet
</h3>
#endif
</div>
</div>
#endsection
and here is my controller
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\Posts\CreatePostRequest;
use App\Post;
use App\Category;
// use Illuminate\Support\Facades\Storage;
use App\Http\Requests\Posts\UpdatePostRequest;
class PostsController extends Controller
{
public function __construct(){
$this->middleware('verifyCategoriesCount')->only(['create','store']);
}
/**
* Display a listing of the resource.
*
* #return \Illuminate\Http\Response
*/
public function index()
{
return view('posts.index')->with('posts', Post::all());
}
/**
* Show the form for creating a new resource.
*
* #return \Illuminate\Http\Response
*/
public function create()
{
return view('posts.create')->with('categories', Category::all());
}
/**
* Store a newly created resource in storage.
*
* #param \Illuminate\Http\Request $request
* #return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$image = $request->image->store('posts');
Post::create([
'title' => $request->title,
'description' => $request->description,
'content' => $request->content,
'image' => $image,
'published_at' => $request->published_at,
'category_id' => $request->category
]);
session()->flash('success', 'Post created succesfully.');
return redirect(route('posts.index'));
}
/**
* Display the specified resource.
*
* #param int $id
* #return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* #param int $id
* #return \Illuminate\Http\Response
*/
public function edit(Post $post)
{
return view('posts.create')->with('post', $post)->with('categories', Category::all());
}
/**
* Update the specified resource in storage.
*
* #param \Illuminate\Http\Request $request
* #param int $id
* #return \Illuminate\Http\Response
*/
public function update(UpdatePostRequest $request, Post $post)
{
$data = $request->only(['title', 'description', 'published_at', 'content']);
// check if new image
if($request->hasFile('image')){
// upload it
$image = $request->image->store('posts');
// delete old one
$post->deleteImage();
$data['image'] = $image;
}
// update attributes
$post->update($data);
// falsh message
session()->flash('success', 'Post updated succesfully');
// redirect user
return redirect(route('posts.index'));
}
/**
* Remove the specified resource from storage.
*
* #param int $id
* #return \Illuminate\Http\Response
*/
public function destroy($id)
{
$post = Post::withTrashed()->where('id', $id)->firstOrFail();
if($post->trashed()){
$post->deleteImage();
$post->forceDelete();
}else{
$post->delete();
}
session()->flash('success', 'Post deleted succesfully.');
return redirect(route('posts.index'));
}
/**
* Display a list of all trashed posts
*
* #return \Illuminate\Http\Response
*/
public function trashed(){
$trashed = Post::onlyTrashed()->get();
return view('posts.index')->withPosts($trashed);
}
public function restore($id){
$post = Post::withTrashed()->where('id', $id)->firstOrFail();
$post->restore();
session()->flash('success', 'Post restored succesfully');
return redirect()->back();
}
}
Your $post->category is not an object which is why this error is coming.
Try
dd($post->category)
and you'll see what's in it. That will help you to debug the real problem.
First eager load the relation (to prevent N+1 issues) using:
public function index()
{
$posts = Post::with('category')->get();
return view('posts.index')->with('posts', $posts);
}
Then if you still get the error, it might be due to the fact that the post you are trying to view does not have category, so the relation is null. So when you try to get the category id, it throws that exception that null does not have id.
You can simply solve it by checking if there is any category before:
#if($post->category)
<a href="{{ route('categories.edit', $post->category->id ) }}">
{{ $post->category->name }}
</a>
#endif
Use eager loading in your controller before injecting the model to the view.
$post->load('category');
Make sure that each post has a relation with a category.
Laravel 7 and 2 tables: comp, computers.
I would like to display in the view index.blade.php the name of the computer e.g. DELL, IBM, LENOWO instead of id of this name.
What the foreach syntax should look like to retrieve the computer name from the computers table.
And when you add a new PC, what should the dropdownlist look like?
class CreateCompTable extends Migration
{
/**
* Run the migrations.
*
* #return void
*/
public function up()
{
Schema::create('comp', function (Blueprint $table) {
$table->id();
$table->integer('name_id')->unsigned();
$table->string('number');
$table->string('year');
$table->timestamps();
$table->foreign('name_id')->references('id')->on('computers')
->onDelete('cascade');
});
}
Table Computers
class CreateComputersTable extends Migration
{
/**
* Run the migrations.
*
* #return void
*/
public function up()
{
Schema::create('computers', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
CompControllers
namespace App\Http\Controllers;
use App\Comp;
use Illuminate\Http\Request;
class CompController extends Controller
{
/**
* Display a listing of the resource.
*
* #return \Illuminate\Http\Response
*/
public function index()
{
$comp = Comp::latest()->paginate(5);
return view('comp.index',compact('comp'))
->with('i', (request()->input('page', 1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*
* #return \Illuminate\Http\Response
*/
public function create()
{
return view('comp.create');
}
/**
* Store a newly created resource in storage.
*
* #param \Illuminate\Http\Request $request
* #return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'name_id' => 'required',
'number' => 'required',
'year' => 'required',
]);
comp::create($request->all());
return redirect()->route('comp.index')
->with('success','xxx.');
}
/**
* Display the specified resource.
*
* #param \App\Comp $comp
* #return \Illuminate\Http\Response
*/
public function show(Comp $comp)
{
return view('comp.show',compact('comp'));
}
View index.blade.php
#extends('comp.layout')
#section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Comp</h2>
</div>
<div class="pull-right">
<a class="btn btn-success" href="{{ route('comp.create') }}"> Add comp</a>
</div>
</div>
</div>
#if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
#endif
<table class="table table-bordered">
<tr>
<th>L.p</th>
<th>Name comp</th>
<th>Number comp</th>
<th>Year</th>
<th width="250px">Acction</th>
</tr>
#foreach ($comp as $comp)
<tr>
<td>{{ ++$i }}</td>
<td>{{ $comp->name_id }}</td>
<td>{{ $comp->number }}</td>
<td>{{ $comp->year }}</td>
<td>
<form action="{{ route('comp.destroy',$comp->id) }}" method="POST">
<a class="btn btn-info" href="{{ route('comp.show',$comp->id) }}">View</a>
<a class="btn btn-primary" href="{{ route('comp.edit',$comp->id) }}">Edit</a>
#csrf
#method('DELETE')
<button type="submit" class="btn btn-danger">Delete</button>
</form>
</td>
</tr>
#endforeach
</table>
#endsection
On Comp model, make a belongsTo relation :
public function computer()
{
return $this->belongsTo('App\Computer', 'name_id');
}
Now you can access this relation, from your blade, as:
#foreach($comp as $comp)
<tr>
<td>{{ $comp->computer->name }}</td>
</tr>
#endforeach
please I don't know what else to be done. I created a resource controller and all was ok the create.blade was accessible and working fine, in fact, was saving to the database. even the index page was working before when it was just common HTML, but immediately I inserted the PHP details it starts loading server error 500. please see below:
My index.blade
<div class="col-md-6" style="float:right">
<a href="{{ route('paymentdetails.create') }}" class="btn btn-primary btn-rounded float-right">
<i class="fas fa-plus mr-2"></i>
#lang('Add Paymentdetails')
</a>
</div>
<div class="table-responsive" id="users-table-wrapper">
<table class="table table-borderless table-striped">
<thead>
<tr>
<th class="min-width-80">#lang('Username')</th>
<th class="min-width-150">#lang('Amountpaid')</th>
<th class="min-width-100">#lang('Description')</th>
<th class="min-width-80">#lang('Created_at')</th>
<th class="min-width-80">#lang('Updated_at')</th>
<th class="text-center min-width-150">#lang('Action')</th>
</tr>
</thead>
<tbody>
#if (count($paymentdetails))
#foreach ($paymentdetails as $paymentdetail)
<tr>
<td class="align-middle">
<a href="{{ route('paymentdetails.show', $paymentdetail) }}">
{{ $paymentdetail->username }}
</a>
</td>
<td class="align-middle">{{ $paymentdetail->amountpaid }}</td>
<td class="align-middle">{{ $paymentdetail->description }}</td>
<td class="align-middle">{{ $paymentdetail->created_at }}</td>
<td class="align-middle">{{ $paymentdetail->updated_at }}</td>
<td class="text-center align-middle">
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuLink">
<a href="{{ route('paymentdetails.show', $paymentdetail) }}" class="dropdown-item text-gray-500">
<i class="fas fa-eye mr-2"></i>
#lang('View Paymentdetails')
</a>
</div>
<a href="{{ route('paymentdetails.edit', $paymentdetail) }}"
class="btn btn-icon edit"
title="#lang('Edit Paymentdetail')"
data-toggle="tooltip" data-placement="top">
<i class="fas fa-edit"></i>
</a>
<a href="{{ route('paymentdetails.destroy', $paymentdetail) }}"
class="btn btn-icon"
title="#lang('Delete Paymentdetail')"
data-toggle="tooltip"
data-placement="top"
data-method="DELETE"
data-confirm-title="#lang('Please Confirm')"
data-confirm-text="#lang('Are you sure that you want to delete this user?')"
data-confirm-delete="#lang('Yes, delete him!')">
<i class="fas fa-trash"></i>
</a>
</td>
</tr>
#endforeach
#else
<tr>
<td colspan="7"><em>#lang('No records found.')</em></td>
</tr>
#endif
</tbody>
</table>
</div>
</div>
</div>
My controller from web
<?php
namespace Vanguard\Http\Controllers\Web;
use Illuminate\Http\Request;
use Illuminate\View\View;
use Vanguard\Http\Controllers\Controller;
Use Vanguard\Paymentdetails;
class PaymentdetailsController extends Controller
{
/**
* Display a listing of the resource.
*
* #return \Illuminate\Http\Response
*/
public function index()
{
// dd("am here");
return view('/paymentdetails.index');
}
/**
* Show the form for creating a new resource.
*
* #return \Illuminate\Http\Response
*/
public function create()
{
return view('/paymentdetails/create');
}
/**
* Store a newly created resource in storage.
*
* #param \Illuminate\Http\Request $request
* #return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'username'=>'required',
'amountpaid'=>'required',
'description'=>'required',
]);
$paymentdetails = new Paymentdetails;
$paymentdetails->username = $request-> input('username');
$paymentdetails->amountpaid = $request-> input('amountpaid');
$paymentdetails->description = $request-> input('description');
$paymentdetails->save();
return redirect()->route('paymentdetails.index')
->withSuccess(__('Paymentdetails created successfully.'));
// if($saveFlag){
// return redirect()->back();
// }
}
/**
* Display the specified resource.
*
* #param int $id
* #return \Illuminate\Http\Response
*/
public function show($id)
{
$paymentdetails = Paymentdetails::find($id);
//dd($paymentdetails);
return view('/paymentdetails/view')->with('paymentdetails',$paymentdetails);
}
My controller from API
<?php
namespace Vanguard\Http\Controllers\Api\Paymentdetails;
use Illuminate\Http\Request;
use Vanguard\Http\Controllers\Api\ApiController;
Use Vanguard\Paymentdetails;
class PaymentdetailsController extends Controller
{
/**
* Display a listing of the resource.
*
* #return \Illuminate\Http\Response
*/
public function index()
{
// dd("am here");
return view('/paymentdetails.index');
}
/**
* Show the form for creating a new resource.
*
* #return \Illuminate\Http\Response
*/
public function create()
{
return view('/paymentdetails/create');
}
/**
* Store a newly created resource in storage.
*
* #param \Illuminate\Http\Request $request
* #return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'username'=>'required',
'amountpaid'=>'required',
'description'=>'required',
]);
$paymentdetails = new Paymentdetails;
$paymentdetails->username = $request-> input('username');
$paymentdetails->amountpaid = $request-> input('amountpaid');
$paymentdetails->description = $request-> input('description');
$paymentdetails->save();
return redirect()->route('paymentdetails.index')
->withSuccess(__('Paymentdetails created successfully.'));
// if($saveFlag){
// return redirect()->back();
// }
}
/**
* Display the specified resource.
*
* #param int $id
* #return \Illuminate\Http\Response
*/
public function show($id)
{
$paymentdetails = Paymentdetails::find($id);
//dd($paymentdetails);
return view('/paymentdetails/view')->with('paymentdetails',$paymentdetails);
}
my route(web)
/**
* Paymentdetails
*/
Route::resource('/paymentdetails', 'PaymentdetailsController')->middleware('permission:paymentdetails.manage');
So I'm trying to use the update() function to update the selected user but when I click submit, it just goes back to index (as it should) but updates nothing. Following is my code:
StudentController (Resource Controller):
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Student;
class StudentController extends Controller
{
/**
* Display a listing of the resource.
*
* #return \Illuminate\Http\Response
*/
public function index()
{
$students = Student::all();
return view ('main',compact('students'));
}
/**
* Show the form for creating a new resource.
*
* #return \Illuminate\Http\Response
*/
public function create()
{
return view ('create');
}
/**
* Store a newly created resource in storage.
*
* #param \Illuminate\Http\Request $request
* #return \Illuminate\Http\Response
*/
public function store(Request $request)
{
Student::create($request->all());
return redirect()->route('main.index')->with('create','Student has been added successfully!');
}
/**
* Display the specified resource.
*
* #param int $id
* #return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* #param int $id
* #return \Illuminate\Http\Response
*/
public function edit($id, Student $student)
{
$student = Student::findOrFail($id);
return view ('edit',compact('student'));
}
/**
* Update the specified resource in storage.
*
* #param \Illuminate\Http\Request $request
* #param int $id
* #return \Illuminate\Http\Response
*/
public function update(Request $request, Student $student)
{
$student->update($request->all());
return redirect()->route('main.index')->with('update','Student has been updated!');
}
/**
* Remove the specified resource from storage.
*
* #param int $id
* #return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
Main.blade.php (Index):
<div class="container">
<div class="row">
<div class="col-lg-12">
<div class="py-4">
#if (Session::has('create'))
<div class="alert alert-info">
{{ Session::get('create') }}
</div>
#endif
#if (Session::has('update'))
<div class="alert alert-info">
{{ Session::get('update') }}
</div>
#endif
<div class="card">
<div class="card-header">
Students
{{ link_to_route('main.create','Add Student','',['class'=>'btn btn-success float-right']) }}
</div>
<div class="card-body">
<table id="myTable" class="table table-striped table-bordered">
<thead>
<tr>
<th>Student Name</th>
<th>Gender</th>
<th>Address</th>
<th>Class</th>
<th>Action</th>
</tr>
</thead>
<tbody>
#foreach($students as $student)
<tr>
<td>{{ $student->name }}</td>
<td>{{ $student->gender }}</td>
<td>{{ $student->address }}</td>
<td>{{ $student->class }}</td>
<td>{{ link_to_route('main.edit','Edit',[$student->id],['class'=> 'btn btn-primary btn-sm']) }}</td>
</tr>
#endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
edit.blade.php (Model):
{!! Form::model($student,array('route'=>['main.update',$student->id],'method'=>'PUT')) !!}
<div class="form-group">
{!! Form::text('name',null,['class'=>'form-control','placeholder'=>'Add Student Name']) !!}
</div>
<div class="form-group">
{!! Form::select('gender', [
'Male' => 'Male',
'Female' => 'Female'],
null, ['class'=>'custom-select','placeholder' => 'Choose Gender']); !!}
</div>
<div class="form-group">
{!! Form::text('address',null,['class'=>'form-control','placeholder'=>'Add Student Address']) !!}
</div>
<div class="form-group">
{!! Form::select('class', [
'A' => 'A',
'B' => 'B',
'C' => 'C',
'D' => 'D',],
null, ['class'=>'custom-select','placeholder' => 'Choose Class']); !!}
</div>
<div class="form-group py-4">
{!! Form::submit('Edit',['type'=>'submit','class'=>'btn btn-danger btn-block']) !!}
</div>
{!! Form::close() !!}
Student.php (Model):
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
protected $fillable = ['name','gender','address','class'];
}
My create.blade.php is exactly the same as my edit.blade.php, the only changes are in the Form::open() line. And the edit page even displays my old data on the input fields but when I make a change & click Update, it just doesn't update anything in the database or the index page - so what am I doing wrong? Thanks in advance and please feel free to ask if any more code is required for you guys to crack this one.
Try this one out:
public function update(Request $request, Student $student)
{
$input = $request->all();
$student->fill($input)->save();
return redirect()->route('main.index')->with('update','Student has been updated!');
}
Try..
public function update(Request $request,$id)
{
$student = Student::find($id);
$student->name = $request->input('name');
$student->gender = $request->input('gender');
$student->address = $request->input('address');
$student->class = $request->input('class');
$student->save();
return redirect()->route('main.index')->with('update','Student has been updated!');
}
request()->all() contains method and token information. Can you maybe pass it through a validator?
$validated = request()->validate([
'name' => 'required',
'address' => '',
..
]);
$student->update($validated);
In your edit.blade.php,
{!! Form::submit('route_to_update()',['type'=>'submit','class'=>'btn btn-danger btn-block']) !!}
change "Edit"
And you can check your route by in your console like "php artisan route:list"
and check your route is reached
by var_damp() or var_export() or dd()in your student controller update function
I have a form in which you submit a "project". One of the field is "created by", but the user does not update this, it gets the name of the authenticated user in that moment and inserts it into the db.
I know how to retrieve the user's name, but the problem is that when I login with another user, then all the name change, because I store the name each time.
This is my project controller
<?php
namespace App\Http\Controllers;
use App\Project;
use App\Client;
use Auth;
use Illuminate\Http\Request;
class ProjectController extends Controller
{
/**
* Display a listing of the resource.
*
* #return \Illuminate\Http\Response
*/
public function __construct()
{
$this->middleware('auth');
}
public function index()
{
return view('projects.index', [
'project' => Project::all()
]);
}
/**
* Show the form for creating a new resource.
*
* #return \Illuminate\Http\Response
*/
public function create()
{
if (Auth::user()->role != 1){
return redirect()->back();
}else{
return view('projects.create',[
'project' => new Project,
'client' => new Client
]);
}
}
/**
* Store a newly created resource in storage.
*
* #param \Illuminate\Http\Request $request
* #return \Illuminate\Http\Response
*/
public function store(Request $r)
{
$validatedData = $r->validate([
'proj_title' => 'required|max:100',
'client_id' => 'required',
'proj_desc' => 'required',
]);
$currentUser = Auth::user()->name;
$r['created_by'] = $currentUser;
$project = Project::create($r->all());
return redirect('/projects')->with('store','');
}
/**
* Display the specified resource.
*
* #param \App\Project $project
* #return \Illuminate\Http\Response
*/
public function show(Project $project)
{
//
}
/**
* Show the form for editing the specified resource.
*
* #param \App\Project $project
* #return \Illuminate\Http\Response
*/
public function edit(Project $project)
{
return view('projects.edit', compact('project'));
}
/**
* Update the specified resource in storage.
*
* #param \Illuminate\Http\Request $request
* #param \App\Project $project
* #return \Illuminate\Http\Response
*/
public function update(Request $r, Project $project)
{
$project->update($r->all());
return redirect('/projects')->with('update','');
}
/**
* Remove the specified resource from storage.
*
* #param \App\Project $project
* #return \Illuminate\Http\Response
*/
public function destroy(Project $project)
{
$project->delete();
return redirect('/projects')->with('delete','');
}
}
And this is my index
#section('content')
<div class="row">
<div class="col">
#if (Auth::user()->role == 1)
<a class="btn btn-success" href="/projects/create">Add Project</a>
#endif
</div>
<div class="col"></div>
<div class="col">
#if(session()->has('store'))
<div class="alert alert-success mt-2" role="alert">
<strong>Project created</strong>
</div>
#elseif(session()->has('update'))
<div class="alert alert-success mt-2" role="alert">
<strong>Project updated</strong>
</div>
#elseif(session()->has('delete'))
<div class="alert alert-success mt-2" role="alert">
<strong>Project deleted</strong>
</div>
#endif
</div>
</div>
<br>
<table class="table table-bordered table-hover">
<thead>
<tr>
<th>Project Id</th>
<th>Title</th>
<th>Description</th>
<th>Client Id</th>
<th>Created by</th>
<th>Created on</th>
#if (Auth::user()->role==1)
<th>Admin</th>
#endif
</tr>
</thead>
<tbody class="">
#foreach ($project as $project)
<tr>
<td>{{$project->proj_id}}</td>
<td>{{$project->proj_title}}</td>
<td>{{$project->proj_desc}}</td>
<td>{{$project->client_id}}</td>
<td>{{$project->Auth::user()->name}}</td>
<td>{{$project->created_at}}</td>
#if (Auth::user()->role==1)
<td>
<div class="dropdown">
<button class="btn btn-danger dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Action</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="{{route('projects.edit',$project)}}">Edit</a>
<form method="POST" action="{{route('projects.destroy',$project)}}" onsubmit="return confirm('Are you sure you want to delete this?')">
#method('DELETE')
#csrf
<button class="dropdown-item" type="submit">Delete</button>
</form>
</div>
</div>
</td>
#endif
</tr>
#endforeach
</tbody>
</table>
#endsection
I think your problem is that you are using:
{{ $project->Auth::user()->name }}
instead of
{{ $project->created_by }}