Do not get return value in controller - codeigniter

I am trying to get last inserted id in controller.
For that I am making one function in model. that was as below:
function _insert($data){
$table = $this->get_table();
$this->db->insert($table, $data);
$inserted_id = $this->db->insert_id();
return $inserted_id;
}
Now how to use this return value in controller?

in controller
$last_id=$this->model_name->_insert($data);
so your last id is saved in $last_id variable.

Related

Pass specific id to model and take data from database using codeigniter?

My controller method like below
public function index($book_id) {
print_r($book_id);
}
I will get the id from view. View like below
I need to get specific row according id on model how can I do that if I use query in controller its not working
If I use like below in controller it gives something else as result
public function index($book_id) {
print_r($book_id);
$this->db->select('*');
$this->db->from('books')->where('book_id', $book_id);
$query = $this->db->get();
print_r($query);
}
but if I use same query in model with hard coded id for testing it gives the expected out put
Please help me with this
You don't need to include "/index" in anchor tag href as controller default method will be index if found. And "print_r($book_id)" should be "echo $book_id" as $book_id is variable not array.
Please try this code (either in model/controller):
$query = $this->db->get_where('books', array('book_id' => $book_id));
$result = $query->row_array();
print_r($result);

how to send variable from controller to model function in laravel

I want to send variable $typeid to function categories to use it in query is there a way Knowing that when I try to use new instance of class in my controller like that:
$cat= new Main_category();
$categories = $cat->categories()->get();
it returns empty array
the following code is working well when I manually add the typeid inside the model function I want to have it as a variable sent from controller
controller:
$categories = Main_category::with('categories')->get();
Model
public function categories()//($typeid)
{
$query = $this->hasMany(Category::class, 'main_cat_id')
->join('category_type','category_type.cat_id','=', 'categories.cat_id')
->join('main_categories','main_categories.main_cat_id','=', 'categories.main_cat_id')
->where('category_type.type_id', '1'); // I want to use $typeid here
return $query;
}
I am not sure whether you can pass your variable in eloquent relationship methods by using with method or not. But you can add a where clause in controller.
Main_category::with(['categories' => function($query) use($typeid) {
$query->where('category_type.type_id', $typeid);
}])->get();
Or you can create a query scope for model too.
in Model
public function scopeWithCategories($query, $typeid) {
return $query->with(['categories' => function($query) use($typeid) {
$query->where('category_type.type_id', $typeid);
}]);
}
and finally in Controller
Main_category::withCategories($typeid)->get();

How to make accessor in Laravel with relations?

I try to display all location on page like:
{{$item->country()->first()->name}}, {{$item->city()->first()->name}}, {{$item->location()->first()->name}}
As you can see these values from relations country, city, location.
How to create accessor in this case? In which model to write accessor?
I tried this:
public function setTeacherNameAttribute()
{
$this->attributes['teacher_name'] = $this->country->name;
}
let say your $item model called Item so do this in it:
protected $appends = ['address'];
public function getAddressAttribute(){
$address = '';
if (!empty($item->country())) $address .= $item->country()->first()->name;
if (!empty($item->city())) $address .= $item->city()->first()->name;
if (!empty($item->location())) $address .= $item->location()->first()->name;
return $address;
}
then you can use it like this $item->address.
Note: change address to anything else if you already have column with that name.
Whether using relations or just plain models, accessors are always accessed through the final model. In your case in the country, city and location models.
The following method creates an accessor for the name attribute:
public function getNameAttribute($value) {
// do something with value, or not
return $value;
}

Pass data from view to controler

I am making a laravel app and I want to pass data to the controller from a view. I want to pass the id of a vehicle in order to get certain information for that car from another table.
desc.blade.php
{{link_to_action('Insur_DocController#index', "Insurances&Docs", $v->id, array('id'=>$v->id))}}
Insur_DocController#index
public function index()
{
$values = DB::select('select * from insur_docs where car_id=?', $id);
return View::make('pages.insur_docs', array(
'values' => $values,
));
}
Displays this error: Undefined variable: id
Assuming that you have a route:
Route::get('car/{id}', 'Insur_DocController#index');
Your controller method must expect the $id:
public function index($id)
{
...
}
Your select will not work this way, you could change it to:
$values = DB::table('insur_docs')->where('car_id', $id)->get();
And check if you got something:
dd($values);
This line of code will dump and die your script, so you can see the result of your query.
There is also an error in the link, which should be:
{{link_to_action('Insur_DocController#index', "Insurances&Docs", array('id'=>$v->id))}}

codeigniter pass variable from controller to model

simple issue I presume.
My controller is getting the if to display from the url using $this->uri->segment(3). This will always be a single value. I am putting this in an array to pass to the model with:
$customerid = array(
'id' => $this->uri->segment(3)
);
The controller syntax is below:
function confirm_delete_customer()
{
$data['title']="Confirm Customer Deletion";
$customerid=array(
'id'=>$this->uri->segment(3)
);
//query model to get data results for form
$data=array();
if($query=$this->model_master_data->get_customer_records_to_delete()){
$data['records']=$query;
$this->load->view("master_data/view_master_data_header",$data);
$this->load->view("master_data/view_master_data_nav");
$this->load->view("master_data/view_content_master_data_confirm_customer_deletion",$data);
$this->load->view("master_data/view_master_data_footer");
}
I am then trying to access this array value and pass it to my model to process. If I hard code the array into the model it works as per below syntax:
Model - Manual Syntax is:
function get_customer_records_to_delete()
{
$query = $this->db->get_where('customers', array('id'=>43));
return $query->result();
}
if I try replace this with the array from my controller it fails with error:
Undefined variable: customerid
idea of model that I want to get working:
function get_customer_records_to_delete()
{
$query = $this->db->get_where('customers', $customerid);
return $query->result();
}
I have a feeling it is something small. however is this the best way to get a single record from the database in order to output to a view?
Thanks in advance for the assistance.
The best way to do that is:
function confirm_delete_customer()
{
$data=array();
$data['title']="Confirm Customer Deletion";
$customerId = $this->uri->segment(3);
//Prevent SQL injections
if(!is_numeric($customerId) || empty($customerId)) {
show_error("Bad Request");
}
$query = $this->model_master_data->get_customer_records_to_delete($customerId);
if ($query){
$data['records']=$query;
$this->load->view("master_data/view_master_data_header",$data);
$this->load->view("master_data/view_master_data_nav");
$this->load->view("master_data/view_content_master_data_confirm_customer_deletion",$data);
$this->load->view("master_data/view_master_data_footer");
}
}
and then you can simply call:
function get_customer_records_to_delete($customerId)
{
$query = $this->db->get_where('customers', array('id'=>$customerId));
return $query->result();
}
at your model.
You need to pass the value as an argument to the function so it can access it.
Ex:
get_customer_records_to_delete($customerid)
{
// now $customerid is accessible
$query = ....;
return $……;
}
You should heavily rely on function parameters. Grab the customer id from the controller and send it to the model. Moreover, you can use row() to get a single result from the database.
Controller:
function confirm_delete_customer(){
$data['title']="Confirm Customer Deletion";
$customerid=$this->uri->segment(3);
//query model to get data results for form
$data=array();
if($query=$this->model_master_data->get_customer_records_to_delete( $customerid)) //you are sending customer id as a parameter here
$data['records']=$query;
$this->load->view("master_data/view_master_data_header",$data);
$this->load->view("master_data/view_master_data_nav");
$this->load->view("master_data/view_content_master_data_confirm_customer_deletion",$data);
$this->load->view("master_data/view_master_data_footer");
}}
Model
function get_customer_records_to_delete($customerid)
{
$query = $this->db->get_where('customers', array("id"=>$customerid)); //you are using the customer id sent from the controller here
return $query->row(); //this will return a single row
}
Old thread but the answer is to declare the variable as "public" in the controller (i.e. public $customerid;), in which case it'll be available to your model. In some cases it's probably safer to explicitly pass as an argument. However, when you have several variables, it's useful to have the option to declare them instead.

Resources