Saving request to database - php

I want to save a request from my laravel 5.2 app a form into my database:
When I submit the request with the word testdy I get an exception:
FatalThrowableError in KeywordController.php line 49: Class
'App\Keyword' not found
Line 49 in my controller is when I want to built my model: $keyword = new Keyword($request);
Below you can find the code of the KeywordController:
<?php
namespace App\Http\Controllers;
use App\Keyword;
use App\Http\Requests\KeywordRequest;
use Response;
use Sentinel;
class KeywordController extends JoshController
{
public function __construct()
{
parent::__construct();
}
/**
* Display a listing of the resource.
*
* #return Response
*/
public function index()
{
// Grab all the Keywords
// $Keywords = Keyword::all();
// Show the page
return View('admin.keyword.index'); //, compact('Keywords'));
}
public function create()
{
// $Keywordcategory = KeywordCategory::lists('title', 'id');
return view('admin.keyword.create'); //, compact('Keywordcategory'));
}
public function store(KeywordRequest $request)
{
//dd($request);
$keyword = new Keyword($request); //line 49 of my controller
$keyword->user_id = Sentinel::getUser()->id;
$keyword->save();
if ($keyword->id) {
return redirect('admin/keyword')->with('success', trans('Keyword/message.success.create'));
} else {
return Redirect::route('admin/keyword')->withInput()->with('error', trans('Keyword/message.error.create'));
}
}
public function show(Keyword $keyword)
{
$comments = Keyword::all();
return view('admin.keyword.show', compact('Keyword', 'comments', 'tags'));
}
public function edit(Keyword $keyword)
{
$Keywordcategory = KeywordCategory::lists('title', 'id');
return view('admin.keyword.edit', compact('Keyword', 'Keywordcategory'));
}
public function update(KeywordRequest $request, Keyword $Keyword)
{
if ($request->hasFile('image')) {
$file = $request->file('image');
$filename = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension() ?: 'png';
$folderName = '/uploads/Keyword/';
$picture = str_random(10).'.'.$extension;
$Keyword->image = $picture;
}
if ($request->hasFile('image')) {
$destinationPath = public_path().$folderName;
$request->file('image')->move($destinationPath, $picture);
}
$Keyword->retag($request['tags']);
if ($Keyword->update($request->except('image', '_method', 'tags'))) {
return redirect('admin/keyword')->with('success', trans('Keyword/message.success.update'));
} else {
return Redirect::route('admin/keyword')->withInput()->with('error', trans('Keyword/message.error.update'));
}
}
public function getModalDelete(Keyword $Keyword)
{
$model = 'Keyword';
$confirm_route = $error = null;
try {
$confirm_route = route('delete/Keyword', ['id' => $Keyword->id]);
return View('admin/layouts/modal_confirmation', compact('error', 'model', 'confirm_route'));
} catch (GroupNotFoundException $e) {
$error = trans('Keyword/message.error.delete', compact('id'));
return View('admin/layouts/modal_confirmation', compact('error', 'model', 'confirm_route'));
}
}
public function destroy(Keyword $Keyword)
{
if ($Keyword->delete()) {
return redirect('admin/keyword')->with('success', trans('Keyword/message.success.delete'));
} else {
return Redirect::route('admin/keyword')->withInput()->with('error', trans('Keyword/message.error.delete'));
}
}
}
My request, see the dd($request); looks like the following:
KeywordRequest {#323 ▼
#container: Application {#3 ▶}
#redirector: Redirector {#330 ▼
#generator: UrlGenerator {#114 ▼
#routes: RouteCollection {#26 ▶}
#request: Request {#40 ▶}
#forcedRoot: null
#forceSchema: null
#cachedRoot: null
#cachedSchema: null
#rootNamespace: "App\Http\Controllers"
#sessionResolver: Closure {#115 ▶}
#dontEncode: array:14 [▶]
}
#session: Store {#264 ▼
#id: "6db1ef2a6ede612fa681e299c7731866afce7b34"
#name: "laravel_session"
#attributes: array:4 [▼
"_token" => "HbguKauEYhU00n9YcCvw8lloKWbd51I6FOhHRORB"
"_previous" => array:1 [▶]
"flash" => array:2 [▶]
"cartalyst_sentinel" => "5jqJ2R6MTFm4DkOefwhknOD3WY4Jaa0T"
]
#bags: []
#metaBag: MetadataBag {#255 ▼
-name: "__metadata"
-storageKey: "_sf2_meta"
#meta: &120 array:3 [▼
"u" => 1492269234
"c" => 1492243279
"l" => "0"
]
-lastUsed: 1492269215
-updateThreshold: 0
}
#bagData: array:1 [▶]
#handler: FileSessionHandler {#265 ▼
#files: Filesystem {#117}
#path: "/home/ubuntu/workspace/storage/framework/sessions"
#minutes: 120
}
#started: true
}
}
#redirect: null
#redirectRoute: null
#redirectAction: null
#errorBag: "default"
#dontFlash: array:2 [▼
0 => "password"
1 => "password_confirmation"
]
#json: null
#convertedFiles: []
#userResolver: Closure {#232 ▼
class: "Cartalyst\Sentinel\Laravel\SentinelServiceProvider"
this: SentinelServiceProvider {#77 …}
use: {▼
$app: Application {#3}
}
file: "/home/ubuntu/workspace/vendor/cartalyst/sentinel/src/Laravel/SentinelServiceProvider.php"
line: "425 to 427"
}
#routeResolver: Closure {#233 ▼
class: "Illuminate\Routing\Router"
this: Router {#24 …}
use: {▼
$route: Route {#149 ▼
#uri: "admin/keyword/create"
#methods: array:1 [▶]
#action: array:6 [▶]
#defaults: []
#wheres: array:1 [▶]
#parameters: []
#parameterNames: []
#compiled: CompiledRoute {#239 ▶}
#router: Router {#24 …}
#container: Application {#3}
}
}
file: "/home/ubuntu/workspace/vendor/laravel/framework/src/Illuminate/Routing/Router.php"
line: "693 to 695"
}
+attributes: ParameterBag {#325 ▼
#parameters: []
}
+request: ParameterBag {#322 ▼
#parameters: array:2 [▼
"_token" => "HbguKauEYhU00n9YcCvw8lloKWbd51I6FOhHRORB"
"keyword" => "tesdy"
]
}
+query: ParameterBag {#324 ▼
#parameters: []
}
+server: ServerBag {#328 ▼
#parameters: array:42 [▶]
}
+files: FileBag {#327 ▼
#parameters: []
}
+cookies: ParameterBag {#326 ▼
#parameters: array:2 [▼
"XSRF-TOKEN" => "HbguKauEYhU00n9YcCvw8lloKWbd51I6FOhHRORB"
"laravel_session" => "6db1ef2a6ede612fa681e299c7731866afce7b34"
]
}
+headers: HeaderBag {#329 ▼
#headers: array:16 [▼
"host" => array:1 [▶]
"content-length" => array:1 [▶]
"cache-control" => array:1 [▶]
"origin" => array:1 [▶]
"upgrade-insecure-requests" => array:1 [▶]
"user-agent" => array:1 [▶]
"content-type" => array:1 [▶]
"accept" => array:1 [▶]
"referer" => array:1 [▶]
"accept-encoding" => array:1 [▶]
"accept-language" => array:1 [▶]
"cookie" => array:1 [▶]
"x-forwarded-proto" => array:1 [▶]
"x-forwarded-port" => array:1 [▶]
"x-forwarded-for" => array:1 [▶]
"connection" => array:1 [▶]
]
#cacheControl: array:1 [▼
"max-age" => "0"
]
}
#content: ""
#languages: null
#charsets: null
#encodings: null
#acceptableContentTypes: null
#pathInfo: null
#requestUri: null
#baseUrl: null
#basePath: null
#method: "POST"
#format: null
#session: Store {#264 ▶}
#locale: null
#defaultLocale: "en"
}
The "keyword" => "tesdy" parameter has the same name in the database.
Any suggestions why $keyword = new Keyword($request); throws an exception?
I appreciate your replies!
Update
My app/Keyword.php file looks like the following:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Keywords extends Model
{
protected $table = 'keywords';
protected $guarded = ['id'];
}

Model name should be Keyword, change it and this will solve the problem:
class Keyword extends Model

Just change the class name to Keyword from Keywords in your app/Keyword.php. The class name should equals to its file name.

Related

Array_merge in laravel

I have data I return them into collection but it does not return as i wish and i need help to fix it.
output
array:11 [▼
0 => Collection {#2762 ▼
#items: array:3 [▼
0 => Product {#2758 ▶}
1 => Product {#2759 ▶}
2 => Product {#2760 ▶}
]
}
1 => Collection {#2792 ▼
#items: []
}
2 => Collection {#2948 ▼
#items: []
}
3 => Collection {#3102 ▼
#items: []
}
4 => Collection {#3216 ▼
#items: []
}
5 => Collection {#2886 ▼
#items: array:10 [▶]
}
6 => Collection {#2920 ▼
#items: array:3 [▶]
}
7 => Collection {#3046 ▼
#items: array:12 [▶]
}
8 => Collection {#3074 ▼
#items: []
}
9 => Collection {#3188 ▼
#items: array:7 [▶]
}
10 => Collection {#3288 ▼
#items: []
}
]
Code
$category = Category::where('slug','=',$catslug)->with('childs', 'parent')->first();
$pp1[] = Product::where('category_id',$category->id)->get();
foreach($category->childs as $first){
$pp2[] = Product::where('category_id',$first->id)->get();
if(count($first->childs)> 0){
foreach($first->childs as $second){
$pp3[] = Product::where('category_id',$second->id)->get();
}
}
}
$products = array_merge($pp1,$pp2,$pp3);
dd($products);
What it should return
It should return all products from all arrays in 1 array only and not categorized by Collection {#2792 ▼ I need to get only collections with items and not the ones that are empty.
Any idea?
update
I've also tried this:
$pp1 = [];
$pp2 = [];
$pp3 = [];
$pp1 = Product::where('category_id',$category->id)->get();
foreach($category->childs as $first){
$pp2 = Product::where('category_id',$first->id)->get();
if(count($first->childs)> 0){
foreach($first->childs as $second){
$pp3 = Product::where('category_id',$second->id)->get();
}
}
}
it returns:
array_merge(): Argument #1 is not an array
You can get all products of the category, of its children and of its grand-children as,
$category = Category::where('slug','=',$catslug)
->with([
'products',
'childs.products',
'childs.childs.products',
'parent'
])
->first()
->toArray();
$products = array_merge([
data_get($category, 'products'),
array_collapse(data_get($category, 'childs.*.products')),
array_collapse(data_get($category, 'childs.*.childs.*.products'))
]);
Fiddle : https://implode.io/ebXrD8

Do you know why it appears "Property [registrationType] does not exist on this collection instance"?

Do you know why the " #if ($nextRegistration->participants->registration_type->contains('certificate_available', 'Y')) [ " shows "Property [registrationType] does not exist on this collection instance"?
I want to show for each registration a link "Get certificate" if the column "certificate_available" of the "registration_types" table has the value "Y".
<ul class="list-group">
#foreach($nextRegistrations as $nextRegistration)
#if(!empty($nextRegistration->conference) || !empty($nextRegistration->conference->start_date))
#if ($nextRegistration->participants->registration_type->contains('certificate_available', 'Y'))
<a href="{{route('conferences.certificateInfo',
[
'regID'=> $nextRegistration->id])}}"
class="btn btn-primary ml-2">Download certificate</a>
#endif
</li>
#endif
#endforeach
</ul>
The participant model has the registration_type():
class Participant extends Model
{
public function registration(){
return $this->belongsTo('App\Registration');
}
public function registration_type(){
return $this->belongsTo('App\RegistrationType');
}
}
To get the $nextRegistrations the code is:
$nextRegistrations = $user->registrations()
->with('participants.registration_type')
->whereHas(
'conference',
function ($query) {
$query->where('end_date', '>', now());
}
)->paginate($pageLimit);
And $nextRegistrations shows like:
LengthAwarePaginator {#336 ▼
#total: 3
#lastPage: 1
#items: Collection {#320 ▼
#items: array:3 [▼
0 => Registration {#308 ▼
...
#relations: array:1 [▼
"participants" => Collection {#327 ▼
#items: array:1 [▼
0 => Participant {#332 ▼
...
#relations: array:1 [▼
"registration_type" => RegistrationType {#337 ▼
#fillable: array:7 [▶]
....
#attributes: array:10 [▼
"id" => 1
"name" => "general"
"description" => "desc general"
"conference_id" => 1
"certificate_id" => 1
"certificate_available" => "Y"
]
...
}
]
...
}
]
}
]
...
}
1 => Registration {#321 ▶}
2 => Registration {#317 ▶}
]
}
....
}
How do you retrieve the data from the database. You may need to use the with method:
$data = Participant::with('registration_type')->get()
or in the view use "registration_type" as a method, not as a property:
$nextRegistration->participants->registration_type()
You can find more about the belongs to relationship here: https://laravel.com/docs/5.6/eloquent-relationships#one-to-many-inverse

How to retrieve nested array data in PHP/Laravel?

{`
+"insights": array:1 [▼
0 => {#209 ▼
+"group": "Provision"
+"dataset": array:1 [▼
0 => {#207 ▼
+"group": "Provision"
+"set": array:3 [▼
0 => {#194 ▼
+"name": "Neutral"
+"value": 917
}
1 => {#203 ▶}
2 => {#197 ▶}
]
}
]
}
]
+"errorCode": 0
}`
How to get the name property inside the set array? I've tried multiple way but it kept error return trying to get property non-object.
suppose you provide $response to your blade view
$response = {
+"insights": array:1 [▼
0 => {#209 ▼
+"group": "Provision"
+"dataset": array:1 [▼
0 => {#207 ▼
+"group": "Provision"
+"set": array:3 [▼
0 => {#194 ▼
+"name": "Neutral"
+"value": 917
}
1 => {#203 ▶}
2 => {#197 ▶}
]
}
]
}
]
+"errorCode": 0
}
You have to loop through to response , in your blade view :
#foreach($response->insights as $insight)
#foreach($insight['dataset'] as $dataset)
#foreach($dataset['set'] as $set)
<tr><td>$set['name']</td></tr>
#endforeach
#endforeach
#endforeach
data_get($data, 'insights.0.dataset.0.set.0.name');
end if you have json - convert it into array -> json_decode(string);
You have to simply loop through it and do whatever you want to with that name,
foreach($response->insights as $temp){
foreach($temp->dataset as $var){
foreach($var as $obj){
$name = $obj->name;
}
}
}

Laravel 5 Query Builder not returning any data

I have some nested query in my application such as example follow.
$arrData = DB::table('service as tsv')
->select($afields)
->join('shops as ts', 'ts.id', '=', 'tsv.shop_id')
->where('ts.name','like','%'.$searchstring.'%');
if(!empty($type) && $type == 'individual')
$arrData->where('ts.type','=', '1');
$arrData->groupBy('tsv.id')->get();
This query not returning the exact output it display the content like
Builder {#351 ▼
#connection: MySqlConnection {#336 ▶}
#grammar: MySqlGrammar {#347 ▶}
#processor: MySqlProcessor {#348}
#bindings: array:5 [▶]
+aggregate: null
+columns: array:7 [▶]
+distinct: false
+from: "service as tsv"
+joins: array:3 [▶]
+wheres: array:3 [▶]
+groups: array:1 [▶]
+havings: null
+orders: array:1 [▶]
+limit: 4
+offset: 0
+unions: null
+unionLimit: null
+unionOffset: null
+unionOrders: null
+lock: null
#backups: []
#operators: array:26 [▶]
#useWritePdo: false
}
I want to display the data how should I access the data from this situation.

How can I get object with query builder in laravel

I'm new to laravel.
In RouteServiceProvider when I'm fetching the article using following code
$router->bind('articles',function($id) {
return \App\Article::active()->findOrFail($id);
});
I get an object:
Article {#323 ▼
#fillable: array:18 [▶]
#dates: array:1 [▶]
...
}
But when I build a custom query using QueryBuilder
public static function getArticleById($id) {
return DB::table('articles')
->leftJoin('news','articles.news_id','=','news.id')
->select('articles.*','reports.name as selected_report_id')
->where('articles.id',$id)
->get();
}
I get array:
array:1 [▼
0 => {#342 ▼
+"id": 40
...
}
]

Categories