I'm trying to retrieve a column from a localhost db using laravel framework and i get this error:
ErrorException in cd582248476d4ab73365f604ce058f390fc48144.php line
10: Undefined variable: Delivery (View:
C:\xampp\htdocs\testt\resources\views\Delivered.blade.php)
#extends('layouts.master')
#section('title')
Pharmacies
#endsection
#section('content')
<section class="row posts">
<div class="col-md-6 col-md-offset-3">
<header><h3>Details of Delivered Orders</h3></header>
#foreach ($Delivery as $Delivery) {
echo $Delivery->Address;
}
#endforeach
}
</div>
</section>
#endsection
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Collection;
class DeliveredController extends Controller
{
public function getDeliveredPage()
{
return view('Delivered');
}
public function index()
{
$Delivery = Delivery::all()->get();
return view('Delivered' ,['Delivery'=>$Delivery]);
}
You don't need to use ->get() after all().
Also, it's better to use a different variable for your collection and your items.
And quick tip for the section in Blade, you can use this:
#section('title', 'Pharmacies')
instead of this
#section('title')
Pharmacies
#endsection
Here's your updated code:
#extends('layouts.master')
#section('title', 'Pharmacies')
#section('content')
<section class="row posts">
<div class="col-md-6 col-md-offset-3">
<header><h3>Details of Delivered Orders</h3></header>
#foreach ($deliveries as $delivery)
{{ $delivery->Address }}
#endforeach
</div>
</section>
#endsection
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Collection;
class DeliveredController extends Controller
{
public function getDeliveredPage()
{
return view('Delivered');
}
public function index()
{
$deliveries = Delivery::all();
return view('Delivered', compact('deliveries'));
}
Related
the #edit route is not creating. everything is ok but showing 404 not found
the problem is on the last route. I ran the php artisan route:list code but not showing any route named /profile/{user}/edit
the web.php code ->>>>>
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProfilesController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('/p/{post}','App\Http\Controllers\PostsController#show');
Route::get('/p/create','App\Http\Controllers\PostsController#create');
Route::post('/p','App\Http\Controllers\PostsController#store');
Route::get('/profile/{user}', [App\Http\Controllers\ProfilesController::class, 'index'])->name('profile.show');
Route::get('/profile/{user}/edit','ProfilesController#edit')->name('profile.edit');
the profiles controller code ->>>>>
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class ProfilesController extends Controller
{
public function edit(User $user)
{
return view('profiles.edit', compact('user'));
}
public function index(User $user)
{
return view('profiles.index', compact('user'));
}
}
the index.blade.php code --->>>>>>>>>>>>>>>
#extends('layouts.app')
#section('content')
<div class="container">
<div><h1>here is a big design</h1></div>
<br>
<div class="d-flex justify-content-between align-items-baseline">
<h1>{{ $user->username}}</h1>
Add New Post
</div>
Edit Profile
<div class="pr-5"><strong>{{$user->posts->count()}}</strong> posts</div>
<div class="pr-5"><strong></strong> followers</div>
<div class="pr-5"><strong></strong> following</div>
<br>
<div><h1>{{ $user->profile->title}}</h1></div>
<br>
<div><h1>{{ $user->profile->description}}</h1></div>
<br>
<div><h1>{{ $user->profile->url ?? 'N/A'}}</h1></div>
<h1>Posts</h1>
<hr>
<div class="row pt-5">
#foreach($user->posts as $post)
<div class="col-4 pb-4">
<a href="/p/{{$post->id}}">
<img src="/storage/{{$post->image}}" class="w-100">
</a>
</div>
#endforeach
</div>
</div>
#endsection
Change your route to
Route::get('/profile/{user}/edit',[ProfilesController::class, 'edit'])->name('profile.edit');
Your way 'ProfilesController#edit' doesn't take use App\Http\Controllers\ProfilesController; into account.
Offtopic suggestion: since you already named your routes I suggest you use the named routes in your blade files instead of hardcoding them:
Edit Profile
instead of
Edit Profile
This way, should you decide to change a URL some time later, you only need to change it in your web.php file once, not all of your hardcoded occurences
So, I'm quite new to Laravel and what I am trying to achieve is to display some string from my data to a page. I'm using Eloquent Model and I can't figure out what I do wrong here. I've attached some of my code below. I hope I make it clear enough.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Product;
class ProductsController extends Controller
{
public function index()
{
$products = Product::all();
return view('products.index')->with('products', $products);
}
Here's where I want the data to be displayed.
#extends ('layouts.app')
#section ('content')
<div class="container-fluid">
<h1>Products</h1>
#if(count($products) > 1 )
#foreach ($products as $product)
<div class="well">
<h3>{{$product->prod_name}}</h3>
</div>
#endforeach
#else
<p>No product found</p>
#endif
</div>
#endsection
UPDATED: The problem is with my loop logic
Since I have only one item inside my database, my loop is supposed to be >= 1 instead of > 1
#if(count($products) >= 1 )
#foreach ($products as $product)
<div class="well">
<h3>{{$product->prod_name}}</h3>
</div>
#endforeach
#else
<p>No product found</p>
#endif
Let's fix up your code and use the correct approach.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Product;
class ProductsController extends Controller
{
public function index()
{
$products = Product::all();
return view('products.index', compact('products'));
}
Notice how I've passed an array via compact as the 2nd parameter of the view function. You can also use view('products.index', ['products' => $products]), I just prefer compact as it is cleaner.
#extends('layouts.app')
#section('content')
<div class="container-fluid">
<h1>Products</h1>
#if(!$products->isEmpty())
#foreach($products as $product)
<div class="well">
<h3>{{ $product->prod_name }}</h3>
</div>
#endforeach
#else
<p>No products found.</p>
#endif
</div>
#endsection
Notice how I've made use of isEmpty, which checks if a collection (obtained here from Eloquent) is empty or not.
Instead of with() maybe View::share can work.
$products = Product::all();
View::share('$products',$products);
return view('products.index');
And dont forget to import View class from Facades. Put this at the begining of page
use Illuminate\Support\Facades\View;
I am m having this annoying problem. Can anyone give a hand to sort out it? I read all posts and I cannot find the solution.
This is my controller
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Auth;
use DB;
use App\Post;
use App\RegisteredCourse;
class DashboardsController extends Controller
{
public function indexA()
{
return view('dashboards.admin-dashboard');
}
public function indexS()
{
$id = Auth::user()->id;
$courses = DB::table('registered__courses')->select('user_id')->where('user_id', '=', $id)->count();
$posts = Post::all();
return view('dashboards.student-dashboard', compact('id', 'courses', 'posts'));
}
public function indexT()
{
return view('dashboards.teacher-dashboard');
}
}
This is a fragment of the blade view. The name of the view is dashboards.student-dashboard
<div class="col-md-12">
<div class="card">
<div class="card-header">
<h3 class="card-title">Posts</h3>
</div>
<div class="card-body">
<div class="tab-content">
<div class="active tab-pane" id="activity">
<!-- Post -->
<!--forEACH-->
#foreach ($posts as $post)
<div class="post">
<div class="user-block">
<span class="username">
{{$post->title}} | {{$post->author}}
</span>
<span class="description">{{optional($post->created_at)->format('d-m-Y')}}</span>
</div>
<!-- /.user-block -->
<p>
{{$post->content}}
</p>
</div>
#endforeach
</div>
</div>
</div>
</div>
</div>
And these are the routes
Route::group(['prefix' => 'dashboard',], function () {
Route::get('/admin', 'DashboardsController#indexA')->name('dashboards.indexA');
Route::get('/teacher', 'DashboardsController#indexT')->name('dashboards.indexT');
Route::get('/student', 'DashboardsController#indexS')->name('dashboards.indexS');
});
I tried to pass al the variable to the view and I always have the same problem. ("Undefined variable").It seems like blocked the possibility to pass variable to the blade view.
What I did before:
1-dd($posts) It does not working, it appears the exception "Undefined variable: posts".
2- I remove the whole content of the blade file and I tried with a simple varible and it stills appearing the exception "Undefined variable".
3- I ran php artisan view:clear and restarted the server.
Any sugestions?
Thank you very much.
Instead of
return view('dashboards.student-dashboard', compact('id', 'courses', 'posts'));
try
return view('dashboards.student-dashboard', ['id'=>$id, 'courses'=>$courses, 'posts'=>$posts]);
This is the error:
"count(): Parameter must be an array or an object that implements
Countable (View: C:\xampp\htdocs\blog\resources\views\inc\sidebar.blade.php)"
This is my views/inc/sidebar.blade.php:
#if(count($articles)>0)
#foreach($articles as $article)
{{$article->title}}
#endforeach
#endif
Here is my controller:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Article;
class HomepageController extends Controller
{
public function sidebar(){
$articles = Article::orderBY('created_at', 'desc')->where('active', '1')->take(2)->get();
return view('inc.sidebar')->with('articles', $articles);
}
}
And on my views/pages/view_article.blade.php
#extends('layouts.layout')
#section('content')
<div class="container">
<div class="row no-gutters" style="margin-top: 10px;margin-left: 5px;margin-right: 5px; min-height: 450px;">
<div class="col-md-9 tex-justify">
<table class="table-responsive">
<tr><td>{{$articles->title}}</td></tr>
<tr><td>{{$articles->created_at->format('M d Y')}}</td></tr>
</table>
<img src="/img/{{$articles->img_article}}">{!!$articles->body!!}</div>
</div>
<div class="col-md-3">
#include('inc.sidebar')
</div>
</div>
</div><br>
#endsection
What am I doing wrong?
The use of orderBY instead of orderBy might be the problem, but if that's not the issue, try replacing:
$articles = Article::orderBY('created_at', 'desc')->where('active', '1')->take(2)->get();
with:
$articles = Article::orderBy('created_at', 'desc')->where('active', '1')->take(2)->get()->all();
The reason behind this is that Illuminate\Database\Query\Builder::get returns an Illuminate\Support\Collection, not an array, whereas Illuminate\Support\Collection::all returns a straight array containing the items in the collection which works with count.
Use #if(isset($articles[0]->id) instead of #if(count($articles)>0)
In my ShowController, I returned a view with variable posts, like
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Depress;
use DB;
use App\Http\Requests;
class ShowController extends Controller
{
public function showPost(Request $request)
{
$posts = Depress::all();
return view('homeview')->with('posts', $posts);
}
}
And in my, homeview.blade.php ,
#foreach($posts as $post)
<div class="panel panel-default">
<div class="panel-heading">{{ $post->name }}</div>
<div class="panel-body">
{{ $post->depression }}
</div>
</div>
#endforeach
But, it's showing,
Undefined Variable: posts
Can anyone please help ?
The posts variable is in session. So use Session::get('posts') to get it.
Or use return view('homeview', compact('posts')); and $posts will be available in view as php variable.
add use App\Post; to your ShowController