Using variable in a different function of the same controller laravel - php

i know this question looks like a easy one and asked many times, but i tried all the possible solution and nothing seems to work. so please don't mark this as duplicate until a solution has been found. So here is the problem,
I have defined a variable $msg_body in tabloader function.
I want to use it in tabloader1 function which is in the same controller.
here is the code and all the solutions that i tried, below is my tabloader function
public function tabloader(Request $request){
$msg_body= Message::where('id', $request->id)->value('body');
$msg_topic= Message::where('id', $request->id)->value('topic');
$this->tabloader1($msg_body);
//$name = $request->$msg_body;
//$a = new RtrController();
//$a->tabloader1();
//Session::put('key', $msg_body);
//$response = Response::make('Hello World');
//return $response->withCookie(Cookie::make('name', 'value', $msg_body));
//DB::table('sendmessages')->insert(array('body1'=>$msg_body, 'phone_nos'=>'1111'));
//foreach($item_nos as $item_no)
//Sendmessage::insert(array('body1'=>$msg_body, 'phone_nos'=>'1234' )); //'phone_nos'=>$item_no
//endforeach
//return view('adminCenter',compact('prod'));
}
and below is my tabloader1 function
public function tabloader1($msg_body){
$prod=Message::get()->all();
$item_nos=DB::table('items')->pluck('phone_no');
//dd($item_nos);
$item_ids=DB::table('items')->pluck('id');
//$name = Session::get('key');
//$value = Cookie::get('name');
//Sendmessage::create(array('body1' => $value,'phone_nos' => '11113'));
DB::table('sendmessages')->insert(array('body1'=>$msg_body, 'phone_nos'=>'1111'));
//foreach($item_nos as $item_no){
//foreach($item_ids as $item_id){
//DB::table('sendmessages')->whereId($item_id)->update(array('phone_nos'=>$item_no ));
//DB::table('sendmessages')->insert(array('body1'=>$msg_body, 'phone_nos'=>'1111'));
return view('adminCenter',compact('prod')); //here i want it to return to .. know the syntax? no
}
i am using that variable to insert it into a table sendmessages
and the error is
"in tabloader1 function, the argument 1 is missing."
I have tried various solutions as you can see the commented lines in code.
Really hoping for a solution, Thanks

try this :
public function tabloader(Request $request){
$msg_body= Message::where('id', $request->id)->select(['body'])->first();
$msg_topic= Message::where('id', $request->id)->select(['topic'])->first();
return $this->tabloader1($msg_body);
}
public function tabloader1($msg_body=''){ // '' if empty
.
.
return view('adminCenter',compact('prod')); //here i want it to return to .. know the syntax? no
}

Related

How to make autonumber restart every year in Laravel/PHP?

I made code like this in Models Number_npe:
public function nomor_akhir()
{
$query = DB::table('nomor_npe')
->select('*')
->orderBy('id','DESC')
->first();
return $query;
}
Then the Controllers:
public function nomor_npe_store(Request $req)
{
$tanggal_npe = $req->input('tanggal_npe');
$pesan = new Nomor_npe();
$check = $pesan->nomor_akhir();
if($check) {
$nomor_npe = $check->nomor_npe+1;
}else{
$nomor_npe = 1;
}
DB::table('nomor_npe')->insert([
'nomor_npe' => $nomor_npe,
'tanggal_npe' => $tanggal_npe
]);
return redirect('nomor_npe')->with('success','Nomor NPE berhasil ditambahkan');
}
The Add NPE Number display looks like this:
When I click Save, the number_npe has been successfully added automatically.
But I want to make when the year changes, the number_npe restarts automatically from 1 again ... Please help everyone who knows
I have to write this as an answer, but it is not 100% an answer to your code, these are just tips for you to have better code. (So if anyone sees this too, they are aware too)
First of all, avoid 100% writing code in other language than English, as we are following it (we do not speak your language) and we do not understand nearly anything unless we use a Translator...
So, if you are going to use Laravel, try to avoid using DB, when you can just use the Model (hopefully you have created it...).
So your class should look like this:
public function lastNumber()
{
return NomorNpe::orderByDesc('id')->first();
}
Then your controller should be like:
public function store(Request $request, NomorNpe $nomor_npe)
{
NomorNpe::create([
'nomor_npe' => $nomor_npe->lastNumber() ? $nomor_npe->lastNumber()->nomor_npe + 1 : 1,
'tanggal_npe' => $request->input('tanggal_npe')
]);
return redirect('nomor_npe')->with('success', 'Nomor NPE berhasil ditambahkan');
}
See how I reduced everything from 13 lines of code to 5 lines of code and is 100% readable... (Or 9 lines to 2)
Make sure to use what Laravel brings you as "default" for it, use Models not DB::table('xxx'), take advantage of Eloquent.
Use this code for starting the number from 1, when the year changed:
public function nomor_npe_store(Request $req) {
$tanggal_npe = $req->input('tanggal_npe');
//---Current Date
$date = date('Y-m-d', time());
//---NOMOR NPE
$nomor_npe = DB('number_npe')->whereYear('tanggal_npe', $date)->max('normor_npe');
if (!$nomor_npe) {
$nomor_npe = 1;
} else {
$nomor_npe++;
}
DB::table('nomor_npe')->insert([
'nomor_npe' => $nomor_npe,
'tanggal_npe' => $tanggal_npe
]);
return redirect('nomor_npe')->with('success','Nomor NPE berhasil ditambahkan');
}

How to test Laravel Scout (with Algolia)?

I have a piece of code like this:
public function index(Request $request, Runner $runnerParam)
{
$name = $request->input('name');
$fromDate = $request->input('from_date');
$toDate = $request->input('to_date');
$runners = Runner::query();
if ($name) {
$runners = $runnerParam::search($name);
}
if ($fromDate && $toDate) {
$runners->where('created_at', '<=',$toDate )
->where('created_at', '>=', $fromDate);
}
switch ($type) {
case 1:
$runners->where('role', '=', runner::PRO);
break;
case 2:
$runners->where('role', '=', runner::AMATEUR);
break;
}
$runners = $runners->get();
foreach($runners as $runner){
$runner->distance = $runner->stats->sum('distance');
}
return $runners;
}
The question is, how do I write test for this? If I just try to provide 'name' in test, it will return nothing like search() function isn't working at all while testing. Tried really hard to find anything on this, but the info is scarce and I only ended up with something like 'set Algolia driver to null', which I managed to do, but to no effect since I don't know what's the point of doing so and how do you apply it in tests. There are absolutely no examples of successful tests out there, just a few questions with short answer that didn't quite help.
A piece of test:
public function testNameFilter()
{
$this->logIn();
$runners = factory(runner::class, 30)->create();
$name = $runners[0]->name;
$response = $this->json('get', route('api::runners.get'), ['name' => $name]);
$responseContent = $response->getContent();
...
}
So, what I get in the end is empty responseContent, which means this is not the right way to test this. Any thoughts?
Why not just test that you've properly configured your class to use Laravel Scout, vs. testing that Laravel Scout works as expected?
public function class_uses_scout()
{
$this->assertTrue(in_array('Laravel\Scout\Searchable', class_uses('App\FooModel')));
}
public function class_has_searchable_array()
{
// compare the searchable array with a hardcoded array here
}
Be sure to set your disable Laravel Scout in your test environment.

CakePHP $this->Auth->user("id") always return null?

I have a function that I use to get the user id of Auth component. It works fine without use return json_encode. The problem is that I need this works with json_encode because I get values from ajax request.
Using json_encode it always return null to id and I can't understand why does it occur. The problem is with the function indexAjax() below.
How could I use $this->Auth->user("id") with json_encode and it not return null ?
Trying.
//using $this->set it works fine
public function index() {
$id = $this->Auth->user("id");
$empresas = $this->Empresa->find('all', array(
'fields'=>array("id", "nomeFantasia", "cnpj",
"telefone1", "telefone2", "celular", "aberto"),
'conditions'=>array("users_id = "=> $id)
));
debug($id) or die;
//$this->set(compact('empresas'));
}
//with json_encode always return null
public function indexAjax() {
$this->autoRender = false;
$id = $this->Auth->user("id");
$empresas = $this->Empresa->find('all', array(
'fields'=>array("id", "nomeFantasia", "cnpj",
"telefone1", "telefone2", "celular", "aberto"),
'conditions'=>array("users_id = "=> $id)
));
return json_encode($id);
}
solved the problem. My solution was when user make login I get the user id and write in session so when I need this id I get from session directly and not from AuthComponent.
It works.

Getting the value of a row in CodeIgniter

I am trying to get the value of a row in the database but not working out that well. I not sure if can work like this.
I am just trying to get the value but also make sure it from the group config and the key.
Model
function getTitle() {
return $this->db->get('setting', array(
->where('group' => 'config'),
->where('key' => 'config_meta_title'),
->where('value'=> ) // Want to be able to return any thing in the value
))->row();
}
In the controller I would do this:
function index() {
$data['title'] = $this->document->getTitle();
$this->load->view('sample', $data);
}
First, you have this line set to this:
$data['title'] $this->document->getTitle();
That should be an = assignment for $this->document->getTitle(); like this:
$data['title'] = $this->document->getTitle();
But then in your function you should actually return the setting value from your query with row()->setting:
function getTitle() {
return $this->db->get('setting', array(
->where('group' => 'config'),
->where('key' => 'config_meta_title'),
->where('value'=> ) // Should return this row information but can not.
))->row()->setting;
}
But that said, I am unclear about this:
->where('value'=> ) // Should return this row information but can not.
A WHERE condition is not a SELECT. It is a condition connected to a SELECT that allows you to SELECT certain values WHERE a criteria is met. So that should be set to something, but not really sure what since your code doesn’t provide much details.
Found Solution Working Now. For Getting Single Item From Database In Codeigniter
Loading In Library
function getTitle($value) {
$this->CI->db->select($value);
$this->CI->db->where("group","config");
$this->CI->db->where("key","config_meta_title");
$query = $this->CI->db->get('setting');
return $query->row()->$value;
}
Or Loading In Model
function getTitle($value) {
$this->db->select($value);
$this->db->where("group","config");
$this->db->where("key","config_meta_title");
$query = $this->db->get('setting');
return $query->row()->$value;
}

Laravel 3 - why does sending parameters to Redirect::to_route not work

I am wondering why the parameters aren't recognized in this way:
return Redirect::to_route('new_snippet', array(Input::get('snippet'), $validation_errors[0]));
or this way:
return Redirect::to_action('snippet#new', array(Input::get('snippet'), $validation_errors[0]));
while they are in this manner
return $this->get_new(Input::get('snippet'), $validation_errors[0]);
by calling this function in the controller:
public function get_new($default_snippet = '', $error = null)
{
#code
}
I hope that anyone can briefly explain this. I am asking because this only works if all of it happens in the same controller.
Thanks

Categories