i am trying to create a CRUD app and am having trouble, if anyone can point me in the right direction i would be grateful, thank you.
Hi there i am having difficulty using data from the json.
i have used it here and it as worked
class JsonUtility
{
public static function makeProductArray(string $file) {
$string = file_get_contents($file);
$productsJson = json_decode($string, true);
$products = [];
foreach ($productsJson as $product) {
switch($product['type']) {
case "cd":
$cdproduct = new CdProduct($product['id'],$product['title'], $product['firstname'],
$product['mainname'],$product['price'], $product['playlength']);
$products[] = $cdproduct;
break;
case "book":
$bookproduct = new BookProduct($product['id'],$product['title'], $product['firstname'],
$product['mainname'],$product['price'], $product['numpages']);
$products[]=$bookproduct;
break;
}
}
return $products;
}
this is my controller
public function index()
{
// create a list.
$products = JsonUtility::makeProductArray('products.json');
return view('products', ['products'=>$products]);
}
this is my route
Route::get('/product' , [ProductController::class, 'index'] );
how can i use this on my controller and what route should i set up to create a product
public static function addNewProduct(string $file, string $producttype, string $title, string $fname, string $sname, float $price, int $pages)
{
$string = file_get_contents($file);
$productsJson = json_decode($string, true);
$ids = [];
foreach ($productsJson as $product) {
$ids[] = $product['id'];
}
rsort($ids);
$newId = $ids[0] + 1;
$products = [];
foreach ($productsJson as $product) {
$products[] = $product;
}
$newProduct = [];
$newProduct['id'] = $newId;
$newProduct['type'] = $producttype;
$newProduct['title'] = $title;
$newProduct['firstname'] = $fname;
$newProduct['mainname'] = $sname;
$newProduct['price'] = $price;
if($producttype=='cd') $newProduct['playlength'] = $pages;
if($producttype=='book') $newProduct['numpages'] = $pages;
$products[] = $newProduct;
$json = json_encode($products);
if(file_put_contents($file, $json))
return true;
else
return false;
}
This is where i am trying to type to code into.
public function create()
{
//show a view to create a new resource
$products = JsonUtility::addNewProduct('products.json');
return view('products', ['products'=>$newProduct], );
}
your function addNewProduct() is expecting 7 parameters when called.
you are getting this error because you cannot provide those parameters that your function is looking for.
in your code above you are passing 'products.json' which is in a string format.
lets assume that it is a JSON data. it will still fail because you are only passing 1 parameter to a function that is expecting 7 parameters.
what you could probably do is change it to
public static function addNewProduct($data)
{
// code here
}
then you can pass your JSON data and then go through each of your json using a loop.
Related
Everything is working fine but after installation of auth package in laravel 8, and after logging into
that website "A non well formed numeric value encountered" error occured in every view. I can't find where is the problem. I also updated from command "composer update" but still error is there.
This is The error image
I need it's answer to reslove this issue.
Below is the Controller Code.
<?php
namespace App\Http\Controllers;
use App\Models\Cart;
use App\Models\Category;
use App\Models\Image;
use App\Models\Product;
use App\Models\state;
use Illuminate\Support\Facades\Auth;
class FrontController extends Controller
{
public function homePage()
{
$popular = Product::inRandomOrder()->limit(8)->get();
$latest = Product::inRandomOrder()->limit(4)->get();
$img = Image::get();
$imgs = Image::orderBy('id','desc')->get();
$categories = Category::where('parent_id',0)->get();
$pimage = [];
foreach ($img as $image) {
if (!isset($pimage[$image->product_id]))
$pimage[$image->product_id] = $image->image;
}
$pimages = [];
foreach ($imgs as $images) {
if (!isset($pimages[$images->product_id]))
$pimages[$images->product_id] = $images->image;
}
$cartCount = 0;
if(Auth::check()){
$cartItems = Cart::join('products','carts.product_id','=','products.id')->where('user_id',Auth::id())->get();
$cartCount = Cart::where('user_id',Auth::user()->id)->count();
return view('pages.index', compact('popular','latest','pimage','pimages','img','cartItems','cartCount', 'categories'));
}
else
return view('pages.index', compact('popular','latest','pimage','pimages','img','cartCount', 'categories'));
}
public function ProductDetail($slug)
{
$product = Product::where('slug',$slug)->first();
$images = Image::where('product_id',$product->id)->get();
$categories = Category::where('parent_id',0)->get();
$cartCount = 0;
if(Auth::check()){
$cartItems = Cart::join('products','carts.product_id','=','products.id')->where('user_id',Auth::id())->get();
$cartCount = Cart::where('user_id',Auth::user()->id)->count();
return view('pages.product_detail', compact('product','images','cartCount','cartItems','categories'));
}
else
return view('pages.product_detail', compact('product','images','cartCount','categories'));
}
public function CartDetail()
{
$img = Image::get();
$categories = Category::where('parent_id',0)->get();
$pimage = [];
foreach ($img as $image) {
if (!isset($pimage[$image->product_id]))
$pimage[$image->product_id] = $image->image;
}
$cartItems = Cart::join('products','carts.product_id','=','products.id')->where('user_id',Auth::id())->get();
$cartCount = Cart::where('user_id',Auth::user()->id)->count();
return view('pages.cart', compact('cartCount','cartItems','pimage','categories'));
}
public function Checkout()
{
$img = Image::get();
$categories = Category::where('parent_id',0)->get();
$pimage = [];
foreach ($img as $image) {
if (!isset($pimage[$image->product_id]))
$pimage[$image->product_id] = $image->image;
}
$state = state::where('country_id',101)->get();
$cartItems = Cart::join('products','carts.product_id','=','products.id')->where('user_id',Auth::id())->get();
$cartCount = Cart::where('user_id',Auth::user()->id)->count();
return view('pages.checkout', compact('cartCount','cartItems','pimage','state','categories'));
}
}
I don't know how without this code on every line of Cart::join, "select('carts.*','product_name')->" the error occured but when i inserted this select statment on specific columns then issue is gets resolved.
This is where i get the error:
$data = Excel::import($path, function($reader) {})->get();
I changed the load() to import(). I want to run this code in Laravel 6, but version 3 of MaatWebsiteExcel does not support load().
I've been searching for solutions, yet i cant find any....
This is my controller:
namespace App\Http\Controllers;
use App\Contact;
use App\CsvData;
use App\Http\Requests\CsvImportRequest;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Session;
use DB;
class ImportController extends Controller
{
public function getImport()
{
return view('import');
}
function parseImport(CsvImportRequest $request)
{
$path = $request->file('csv_file')->getRealPath();
if ($request->has('header')) {
$data = Excel::import($path, function($reader) {})->get();
} else {
$data = array_map('str_getcsv', file($path));
}
if (count($data) > 0) {
if ($request->has('header')) {
$csv_header_fields = [];
foreach ($data[0] as $key => $value) {
$csv_header_fields[] = $key;
}
}
$csv_data = array_slice($data, 0, 2);
$credentials = $request->file('csv_file')->getClientOriginalName();
$filename = CsvData::all('csv_filename');
if(CsvData::where('csv_filename', '=' ,$credentials)->exists()){
return redirect()->back()->with('alert', 'This specific file has already been imported!');
}
else{
$csv_data_file = CsvData::create([
'csv_filename' => $request->file('csv_file')->getClientOriginalName(),
'csv_header' => $request->has('header'),
'csv_data' => json_encode($data)
]);
}
}
else {
return redirect()->back();
}
return view('import_fields', compact( 'csv_header_fields', 'csv_data', 'csv_data_file'));
}
public function processImport(Request $request)
{
$data = CsvData::find($request->csv_data_file_id);
$csv_data = json_decode($data->csv_data, true);
if(CsvData::where('csv_data', '=' ,$csv_data)->exists()){
return redirect()->back()->with('alert', 'This file has already been imported!');
}
else{
foreach ($csv_data as $row) {
$contact = new Contact();
foreach (config('app.db_fields') as $index => $field) {
if ($data->csv_header) {
$contact->$field = $row[$request->fields[$field]];
} else {
$contact->$field = $row[$request->fields[$index]];
}
}
foreach($contact as $contacts){
$contact->posted_by = $contacts->posted_by;
$contact->employer = $contacts->employer;
$contact->address = $contacts->address;
$contact->barangay = $contacts->barangay;
$contact->citymunicipality = $contacts->citymunicipality;
$contact->province = $contacts->province;
$contact->region = $contacts->region;
$contact->position = $contacts->position;
$contact->job_description = $contacts->job_description;
$contact->salary = $contacts->salary;
$contact->count = $contacts->count;
$contact->work_location = $contacts->work_location;
$contact->nature_of_work = $contacts->nature_of_work;
$contact->min_work_exp_mos = $contacts->min_work_exp_mos;
$contact->min_educ_level = $contacts->min_educ_level;
$contact->coursemajor = $contacts->coursemajor;
$contact->min_age = $contacts->min_age;
$contact->max_age = $contacts->max_age;
$contact->min_height = $contacts->min_height;
$contact->sex = $contacts->sex;
$contact->civil_status = $contacts->civil_status;
$contact->other_qualifications = $contacts->other_qualifications;
$contact->remarks = $contacts->remarks;
$contact->accept_disability = $contacts->accept_disability;
$contact->date_posted = $contacts->date_posted['date'];
$contact->valid_until = $contacts->valid_until['date'];
$contact->date_created = $contacts->date_created['date'];
$contact->last_modified_by = $contacts->last_modified_by['date'];
$contact->date_last_modified = $contacts->date_last_modified['date'];
}
$contact->save();
return view('import_success');
}
}
}
}```
The first parameter of the import() method is not the path to the file anymore in Laravel 3.1, but the class name of the Import file you have to create.
You need to follow below steps to use import method
Step1: Create Import File using below command.
php artisan make:import CsvImport
Step2: Inside CsvImport make changes like this:
namespace App\Imports;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
class CsvImport implements ToCollection
{
public function collection(Collection $rows)
{
return $rows; //add this line
}
}
Step3: In Controller make changes like this:
$path = $request->file('csv_file')->getRealPath();
$rows = Excel::import(new CsvImport, $path);
Reference:
https://docs.laravel-excel.com/3.1/imports/basics.html
I need only those columns after specific indexing, which I consider practically the same use case as described in the question at the top of this page. I propose the following as solution.
$fileArr = (new BulkSampleImport)->toArray($request->file);
This is somewhat related to [CodeIgniter active records' problems calling multiple stored procedures
but I am not experiencing a blank page; instead when I am passing my data array to view it seems that the the preceding array also being drag to the view.
model
public function data1($student) {
$year = 1;
$sem = 1;
$course = $this->getStudentCourseByStudentId($student);
$sql = "CALL EVALUATION_BY_YEAR_SEM(?,?,?,?)";
$query = $this->db->query($sql, array($course, $student, $year, $sem));
if (!$query) {
return $this->db->error();
} else {
mysqli_next_result( $this->db->conn_id );
return $query->result();
}
}
public function data2($student) {
$year = 1;
$sem = 2;
$course = $this->getStudentCourseByStudentId($student);
$sql = "CALL EVALUATION_BY_YEAR_SEM(?,?,?,?)";
$query = $this->db->query($sql,array($course,$student,$year,$sem));
if (!$query) {
return $this->db->error();
} else {
mysqli_next_result( $this->db->conn_id );
return $query->result();
}
}
Controller:
$data['data1']=data1 from my model(SP);
$data['data2']=data2 from my model(SP);
View:
foreach($data2 as key => $value ) {
echo ....;
}
Here's the PROBLEM... in the view, I only wanted to output the $data2 but to my surprise $data1 is also being output.
Does anybody else have this issue?
I JUST SOLVE IT.
Model
public function data1($student){
**$this->db->initialize();**
$year = 1;$sem = 1;
$course = $this->getStudentCourseByStudentId($student);
$sql = "CALL EVALUATION_BY_YEAR_SEM(?,?,?,?)";
$query = $this->db->query($sql,array($course,$student,$year,$sem));
if (!$query) {
return $this->db->error();
}else {
mysqli_next_result( $this->db->conn_id );
return $query->result();**$this->db->close();**
}
}
public function data2($student){
**$this->db->initialize();**
$year = 1;$sem = 2;
$course = $this->getStudentCourseByStudentId($student);
$sql = "CALL EVALUATION_BY_YEAR_SEM(?,?,?,?)";
$query = $this->db->query($sql,array($course,$student,$year,$sem));
if (!$query) {
return $this->db->error();
}else {
mysqli_next_result( $this->db->conn_id );
return $query->result();**$this->db->close();**
}
}
controller
$data['data1']=data1 from my model(SP);
**$this->db->close();**
$data['data2']=data2 from my model(SP);
my function
public function post_sofware_technology(Request $request)
{
$titile = $request->input('category_title');
$excerpt = $request->input('Excerpt');
$post = new posts();
$post->post_title = $titile;
$post->post_excerpt = $excerpt;
$post->save();
$soft_id = $post->id;
$this->edit_web_services($soft_id);
}
Another Function
public function edit_web_services($soft_id)
{
$soft = $soft_id;
dd($soft);
}
I want to pass my $soft_id = $post->id; value from post_sofware_technology() method to edit_web_services($soft_id) within the same controller.
try with this
public function post_sofware_technology(Request $request)
{
$titile = $request->input('category_title');
$excerpt = $request->input('Excerpt');
$post = new posts();
$post->post_title = $titile;
$post->post_excerpt = $excerpt;
$post->save();
$soft_id = $post->id;
return $this->edit_web_services($soft_id);
}
I am trying to sending mails to all users. But i can't figure out how to make this. In my controller, i made this.
public function send_mail()
{
$mails = Joinus::all();
$array = array();
$allmails = array();
foreach ($mails as $mail)
{
$allmails = array_push($array, $mail->email);
};
Mail::to($allmails)->send((new SendMail(new Joinus('email')))->delay(30));
}
I am getting all types of error. Last one is
__construct() must be of the type array
In my SendMail.php
public function __construct($email)
{
$this->email = $email;
}
I wasted my one day and can't make. I am very grateful for your help. Thanks an advance.
public function send_mail()
{
$mails = Joinus::pluck('email')->toArray();
foreach ($mails as $mail)
{
Mail::to($mail)->send((new SendMail(new Joinus($mail)))->delay(30));
};
}
$allmails = array_push($array, $mail->email); is wrong
Right answer is just array_push($array, $mail->email);
array_push($array, $mail->email); this is returning an array.
$allmails = array_push($array, $mail->email);
But this is returning int value.
You can try this.
public function send_mail()
{
$mails = Joinus::all();
$array = array();
$allmails = array();
foreach ($mails as $mail)
{
$allmails = array_push($array, $mail->email);
};
Mail::to($allmails)->send(new SendMail(new Joinus('email')))->delay(30);
}
Thanks,