I wrote an eloquent statement in my model that outputs a whole lot of data which is fully modelled for my output. It returns the right content when I dump it in the backend (if you look at the comment below).
But when I try to get it formatted with blade for my table, it cuts a whole lot of data at the top. It starts somewhere at the mid of all.
I tried a lot of styling like put some standard CSS from bootstrap and nothing at all, because I thought that this is a display error, but it seems not.
Route:
Route::get('/', function () {
$hs = App\Wl_steige::all()->first();
$hs = $hs->getByStation('ptMetro')->groupBy('BEZEICHNUNG');
//dump($hs = $hs->getByStation('ptMetro')->groupBy('BEZEICHNUNG'))
return view('welcome', ['stellen' => collect($hs)]);
});
View:
<div class="card">
<div class="card-body">
<table class="table table-dark">
<tbody>
#foreach($stellen AS $line => $stations)
<tr>
<th>Linie {{ $line }}</th>
</tr>
#foreach($stations AS $station)
<tr>
<td>{{ $station->NAME }}</td>
<td>{{ $station->VERKEHRSMITTEL }}</td>
<td>{{ $station->RBL_NUMMER }}</td>
<td>{{ $station->STEIG_WGS84_LAT }}</td>
<td>{{ $station->STEIG_WGS84_LON }}</td>
</tr>
#endforeach
#endforeach
</tbody>
</table>
</div>
</div>
I expected that it would begin at the top and not somewhere in the middle.
There was a "hidden" text-align: center; from the former Laravel template which - I dont know why but made my text float out of the screen.
I didnt saw it at first because it was somewhere Cached.
After I cleared at first hand Laravels cache files php artisan cache:clear and then Cmd + R for Chrome, it worked fine for me.
Related
Basic orchid tables really bad in terms if interactivity so i created a table using blade template like this:
<table id=permissions'>
<thead>
<tr>
<td>{{ __('Permission') }}</td><td>{{ __('Status') }}</td><td class='hide'></td>
</tr>
</thead>
<tbody>
#foreach($permissions as $permission)
<tr>
<td>{{ $permission['description'] }}</td>
<td><input type='checkbox' #if($permission['active']) checked #endif></td>
<td class='hide'>{{ $permission['slug'] }}</td>
</tr>
#endforeach
</tbody>
</table>
{!!
\Orchid\Screen\Actions\Button::make(__('Save'))
->method('save')
!!}
Data from table not existing in request when i call "save()" method (the call itself is fine). Is there any way to solve this? I figured orchid filling request using "name" property of orchid's element, but i do not now how to implement it on my html table
Found a solution myself.
The trick is: data you want from table must be a value of input field and that field must have unique name. Like this
<td>{{ $field['description'] }}</td>
<td><input name={{ $field['slug'].'-status' }} type='checkbox' #if($field['active']) checked #endif></td>
<td style='display:none'><input name={{ $field['slug'] }} value={{ $field['slug'] }}></td>
In $request variable it wil be looking like:
[
'permission.1.slug' => slug.value
'permission.1.slug-status' => 'on' (wont be present if checkbox is emty)
]
In my case on server it looks like "dump" of fields, but at least it working now.
I am working in Laravel 7, pulling data from my db and showing the student his/her score on the scores page in percentage via the following codes.
In my StudentOperationController.php
public function show_result($id) {
$data['result_info'] = Oex_result::where('id', $id)->get()->first();
$data['student_info'] = Oex_students::select(['oex_students.*', 'oex_exam_masters.title', 'oex_exam_masters.exam_date'])->join('oex_exam_masters', 'oex_students.exam', '=', 'oex_exam_masters.id')->where('oex_students.id', Session::get('id'))->get()->first();
return view('student.show_result', $data);
}
and in my show_result.blade.php
<h2>Result Information</h2>
<table class="table">
<tr>
<td>Number Correct</td>
<td>{{ $result_info->yes_ans }}</td>
</tr>
<tr>
<td>Number Incorrect</td>
<td>{{ $result_info->no_ans }}</td>
</tr>
<tr>
<td>Total</td>
<td>{{ round($result_info->yes_ans / ($result_info->yes_ans + $result_info->no_ans) * 100 , 1) }} %</td>
</tr>
</table>
The reason I show this is that it works as expected. this is within the students dashboard. In my admin, I am trying to do the same thing and show that students data for his/her exam result. In my database, I have a json type data for example: {"2":"YES","3":"YES","8":"YES"}. I am still learning Laravel and am stuck on how to get this data to my admin. I am clearly doing something wrong and am in need of assistance. Here is what I have tried:
AdminController.php
public function manage_students($id)
{
$data['result_info'] = Oex_result::where('id', $id)->get()->first();
// dd($data);
$data['student_info'] = Oex_students::select(['oex_students.*', 'oex_exam_masters.title', 'oex_exam_masters.exam_date'])->join('oex_exam_masters', 'oex_students.exam', '=', 'oex_exam_masters.id')->where('oex_students.id', Session::get('id'))->get()->first();
$data['exams'] = Oex_exam_master::where('status', '1')->get()->toArray();
$data['students'] = Oex_students::select(['oex_students.*', 'oex_exam_masters.title as exam_name'])
->join('oex_exam_masters', 'oex_students.exam', '=', 'oex_exam_masters.id')
->get()->toArray();
return view('admin.manage_students', $data);
}
and in my manage_students.blade.php, I have
<tbody>
#foreach($students as $key => $student)
<tr>
<td>{{ $key+1 }}</td>
<td>{{ $student['name'] }}</td>
<td>{{ $student['email'] }}</td>
<td>{{ $student['mobile_no'] }}</td>
<td>{{ $student['exam_name'] }}</td>
{{-- <td>N/A</td> --}}
<td>{{ round($result_info->yes_ans / ($result_info->yes_ans + $result_info->no_ans) * 100 , 1) }} % </td>
#if($student['status']== 1)
<td><input data-id="{{ $student['id'] }}" class="student_status" type="checkbox" name="status" checked></td>
#else
<td><input data-id="{{ $student['id'] }}" class="student_status" type="checkbox" name="status"></td>
#endif
<td>
Edit
Delete
</td>
</tr>
#endforeach
</tbody>
In doing this I get the error Too Few arguments to function ... 0 passed and exactly 1 expected
I am unable to replicate what I have for the student dashboard and because of my lack of Laravel knowledge, I am having trouble solving this issue. So, any help would be greatly appreciated. If I am missing anything, please let me know so I can edit my question. Thanks in advance.
Edit: manage_students route:
Route::get('admin/manage_students', 'AdminController#manage_students');
Edit Number 2:
Too few arguments to function App\Http\Controllers\AdminController::manage_students(), 0 passed and exactly 1 expected
C:\laragon\www\lionsfieldtest\app\Http\Controllers\AdminController.php:146
Referring to this line:
public function manage_students($id)
Edit Number 3:
in resources/views/layouts/app.blade.php
<li class="nav-item">
<a href="{{ url('admin/manage_students') }}" class="nav-link">
<i class="nav-icon fas fa-school"></i>
<p>
Student Management
</p>
</a>
</li>
Edit number 4:
The manage_student page brings in data from a number of student's exam results
This function request $id;
public function manage_students($id)
This route doesn't pass one
Route::get('admin/manage_students', 'AdminController#manage_students');
As I can see you are filtering by results which in this case you need $result id
Route::get('admin/manage_student/{id}', 'AdminController#manage_students');
So you have to pass result ID, but lets assume there is a default results id
public function manage_students($id=2)
then this route works because $id is optional/predefined.
Route::get('admin/manage_students', 'AdminController#manage_students');
And if you pass an ID it will use
Route::get('admin/manage_student/{id}', 'AdminController#manage_students');
Make 2 routes and make parameter optional/predefined.
if you go to /admin/manage_student it will use ID 2
but if you pass /admin/manage_student/5 it will use 5
i cant access my admin_table i know i have and problem on my route on the admin_table please help me on my route Property [id] does not exist on this collection instance.
my admin_table.blade
#foreach ($users as $positions)
#foreach ($positions->admins as $position )
<tbody>
<tr>
<td>{{ $position->id}}</td>
<td>{{ $position->first_name}}</td>
<td>{{ $position->last_name}}</td>
<td>{{ $position->contact}}</td>
<td>{{ $position->departments->department}}</td>
<td>{{ $position->schoolpositions->school_position}}</td>
<td>{{ $position->email}}</td>
<th> Edit
</th>
</tr>
</tbody>
#endforeach
</tr>
</tbody>
#endforeach
#endforeach
</table>
this is my route
Route::get('/admin_table', 'DashboardController#index');
Route::put('/admin_table/{id}', 'DashboardController#store');
Route::get('/admin_table', 'DashboardController#show');
Route::get('/teacher_editform/{id}', 'DashboardController#edit');
Route::put('/teacher_editform/{id}', 'DashboardController#update')->name('teacheradminpage.teacher_tableform.teacher_editform');
this is my controller
public function edit($id)
{
$departments = Department::find($id);
$users = Schoolposition::find($id);
$students = Student::find($id);
$admins = Admin::find($id);
return view('teacheradminpage.teacher_tableform.teacher_editform', compact('departments','users','students','admins', 'id', 'id', 'id', 'id'));
}
Your issue is that you put an extra $position before the array. Your route should be
Edit
You've got several issues in this code that probably need attention. The main issue with the position error, seems to be that you've got a circular path to get that $position in your anchor tab within the loop.
This section is likely not creating what you want:
#foreach ($users as $positions)
#foreach ($positions->admins as $position )
This is roughly saying - take my collection of users and make a new collection of positions that are directly attached to each user object. From here, take that collection of positions and try and find a collection of admins on that are attached to that collection and then find a $position. (I think this is close to what it is trying to do...)
When you get to the inside of the loop and your anchor / route, you are asking the anchor to find an id on something that is likely either non-existent, or a collection again.
You have already passed in admins to this view. It would make sense to use that as your top level loop item, no?
To fix, use admins as the only loop item:
#foreach ($admins as $position )
Edit Your Blade With
#foreach ($users as $positions)
#if(!empty($positions->admins)
#foreach ($positions->admins as $position )
<tbody>
<tr>
<td>{{ $position->id}}</td>
<td>{{ $position->first_name}}</td>
<td>{{ $position->last_name}}</td>
<td>{{ $position->contact}}</td>
<td>{{ $position->departments->department}}</td>
<td>{{ $position->schoolpositions->school_position}}</td>
<td>{{ $position->email}}</td>
<th> Edit
</th>
</tr>
</tbody>
#endforeach
</tr>
</tbody>
#endforeach
#endif
#endforeach
</table>
Can anyone help me complete this? I'm a beginner and this is my first time using Laravel and PHP.
<?php
#foreach ($peminjaman as $value)
<tbody>
<tr>
<td>{{ ++$i }}</td>
<td>{{ $value->no_peminjaman }}</td>
<td>{{ $value->no_bmn }}</td>
<td>{{ $value->no_seri }}</td>
<td>{{ $value->kelengkapan }}</td>
</tr>
</tbody>
#endforeach
You need to add links(), so that the links for pagination can be generated in your view.Just have a look at the documentation here and you're good to go:https://laravel.com/docs/5.7/pagination
Hope this helps.
When you do :
$peminjaman = Model::paginate(10);
The $peminjaman is an instance of Illuminate\Pagination\LengthAwarePaginator.
In your case it seems like somewhere you have $peminjaman->id which as a result throwing the error you mentioned.
There is no property called id present on the LengthAwarePaginator paginator instance.
So I have a page setup with a table of items. In each row there is a link. When the link is clicked I want to pass the ID of them through to the controller so I can pass it on to another view. Although I can't figure out how to do this.
This is the code in my item view
#foreach($items as $item)
<tr>
<td>{{$item->title}}</td>
<td>{{$item->genre}}</td>
<td>{{$item->description}}</td>
<td>View</td>
</tr>
#endforeach
As you can see there is a link which leads me to the rent view. In the controller this is all I have.
public function rent()
{
return view('rent');
}
Any help would be appreciated thanks.
I'd probably do it something like this.
#foreach($items as $item)
<tr>
<td>{{$item->title}}</td>
<td>{{$item->genre}}</td>
<td>{{$item->description}}</td>
<td>View</td>
</tr>
#endforeach
And then inside your controller you can accept the the value you are passing.
public function rent($value)
{
return View::make('new-view')->with('value', $value);
}
and then inside your new-view.blade.php
<p> The value I passed is: {{ $value }} </p>
Read more about Laravel url helpers here https://laravel.com/docs/5.1/helpers#urls
You can use route() helper:
#foreach($items as $item)
<tr>
<td>{{ $item->title }}</td>
<td>{{ $item->genre }</td>
<td>{{ $item->description }}</td>
<td>View</td>
</tr>
#endforeach
As alternative you can use link to action:
{{ action('RentController#profile', ['id' => $item->someId]); }}
And sometimes it's useful to use url() helper:
{{ echo url('rent', [$item->someId]) }}
More on these helpes here.
If you're using Laravel 5 with Laravel Collective installed or you're on Laravel 4, you can use these constructions to generate URLs with parameters.
PS: If you're using tables for layout, don't do it. You should learn DIVs, because it's really easy now to build cool layout with DIVs using Bootstrap framework which is built-in Laravel.