Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

laravel how to access column with number name of a table?

Tags:

I make a table with number 22 as the column name. How to access this column?

enter image description here

content:

enter image description here

I've tryed thest

$obj = Tablename::find(1)->first(); $obj->22; $obj->'22';   //'syntax error, unexpected ''22'' $obj->"22"; $obj->`22`; $obj[22]; $arr = $obj->toArray(); var_dump($arr); //  array(15) { ["id"]=> string(2) "25" ["out_trade_no"]=> string(14) "14847080930025" ["22"]=> string(0) "2" $arr[22];       // 'ErrorException' with message 'Undefined offset: 22' $arr['22'];     // 'ErrorException' with message 'Undefined offset: 22' $arr["22"];     // 'ErrorException' with message 'Undefined offset: 22' $arr[`22`];     // 'ErrorException' with message 'Undefined index: ' in $arr[{'22'}];   //  'syntax error, unexpected '{', expecting ']'' in 

none works.

edited as the answer implemented: also get null.

var_dump($orders[0]); var_dump($orders[0]->id); var_dump($orders[0]->{'22'}); $col = '22'; $res = $orders[0]->{$col}; var_dump($res); 

output:

object(Order)#537(21){     [         "connection": protected     ]=>NULL[         "table": protected     ]=>NULL[         "primaryKey": protected     ]=>string(2)"id"[         "perPage": protected     ]=>int(15)[         "incrementing"     ]=>bool(true)[         "timestamps"     ]=>bool(true)[         "attributes": protected     ]=>array(15){         [             "id"         ]=>string(2)"25"[             "out_trade_no"         ]=>string(14)"14847080930025"[             "22"         ]=>string(1)"2"[             "user_id"         ]=>string(2)"49"[             "product_name"         ]=>string(4)"test"[             "amount"         ]=>string(1)"3"[             "fee"         ]=>string(4)"0.03"[             "address_id"         ]=>string(1)"3"[             "trade_status"         ]=>string(13)"TRADE_SUCCESS"[             "express_name"         ]=>string(0)""[             "express_no"         ]=>string(0)""[             "buyer_email"         ]=>string(0)""[             "modify_at"         ]=>string(19)"2017-01-18 10:54:53"[             "created_at"         ]=>string(19)"2017-01-18 10:54:53"[             "updated_at"         ]=>string(19)"2017-01-18 10:55:26"     }[         "original": protected     ]=>array(15){         [             "id"         ]=>string(2)"25"[             "out_trade_no"         ]=>string(14)"14847080930025"[             "22"         ]=>string(1)"2"[             "user_id"         ]=>string(2)"49"[             "product_name"         ]=>string(4)"test"[             "amount"         ]=>string(1)"3"[             "fee"         ]=>string(4)"0.03"[             "address_id"         ]=>string(1)"3"[             "trade_status"         ]=>string(13)"TRADE_SUCCESS"[             "express_name"         ]=>string(0)""[             "express_no"         ]=>string(0)""[             "buyer_email"         ]=>string(0)""[             "modify_at"         ]=>string(19)"2017-01-18 10:54:53"[             "created_at"         ]=>string(19)"2017-01-18 10:54:53"[             "updated_at"         ]=>string(19)"2017-01-18 10:55:26"     }[         "relations": protected     ]=>array(0){      }[         "hidden": protected     ]=>array(0){      }[         "visible": protected     ]=>array(0){      }[         "appends": protected     ]=>array(0){      }[         "fillable": protected     ]=>array(0){      }[         "guarded": protected     ]=>array(1){         [             0         ]=>string(1)"*"     }[         "dates": protected     ]=>array(0){      }[         "touches": protected     ]=>array(0){      }[         "observables": protected     ]=>array(0){      }[         "with": protected     ]=>array(0){      }[         "morphClass": protected     ]=>NULL[         "exists"     ]=>bool(true)[         "softDelete": protected     ]=>bool(false) }string(2)"25"NULLNULL 

Edit: acording to Paras's comment

enter image description here

Edit2: to make question simple and clear:

migration:

<?php  use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration;  class Test extends Migration {      /**      * Run the migrations.      *      * @return void      */     public function up()     {         Schema::create('tests', function($table)         {             $table->increments('id');             $table->integer('22');         });     }      /**      * Reverse the migrations.      *      * @return void      */     public function down()     {         //     }  } 

Model:

<?php class Test extends Eloquent { } 

Controller:

public function show() {     $tests = Test::all();     foreach($tests as $test)     {         Log::info($test->id);         Log::info($test->{'22'});         Log::info($test->{"22"});         Log::info($test->getAttribute("22"));     } } 

data table:

enter image description here

and the log:

[2017-02-25 09:16:48] production.INFO: 1 [] [] [2017-02-25 09:16:48] production.INFO:  [] [] [2017-02-25 09:16:48] production.INFO:  [] [] [2017-02-25 09:16:48] production.INFO:  [] [] [2017-02-25 09:16:48] production.INFO: 2 [] [] [2017-02-25 09:16:48] production.INFO:  [] [] [2017-02-25 09:16:48] production.INFO:  [] [] [2017-02-25 09:16:48] production.INFO:  [] [] 
like image 859
LF00 Avatar asked Jan 18 '17 04:01

LF00


People also ask

How do I get column names in SQL laravel?

How do I get column names in SQL laravel? You can get all the column names from a table using the DB facade and Schema facade. You have to call the getColumnListing() method (using DB and Schema facade) by passing the table name as an argument to get all columns from the table.

What does get () do in laravel?

For creating ::where statements, you will use get() and first() methods. The first() method will return only one record, while the get() method will return an array of records that you can loop over. Also, the find() method can be used with an array of primary keys, which will return a collection of matching records.

How check column is null or not in laravel?

Check if not null: whereNotNullSELECT * FROM users WHERE last_name IS NOT NULL; The equivalent to the IS NOT NULL condition in Laravel Eloquent is the whereNotNull method, which allows you to verify if a specific column's value is not NULL .


2 Answers

You can use the following syntax, as found in the variable variables topic in the PHP documentation:

$obj->{'22'}; 

...

Curly braces may also be used, to clearly delimit the property name. They are most useful when accessing values within a property that contains an array, when the property name is made of mulitple parts, or when the property name contains characters that are not otherwise valid (e.g. from json_decode() or SimpleXML).

like image 155
Marty Avatar answered Oct 13 '22 18:10

Marty


Best way is NOT to use Integer as a fieldname. It is bad praxis. But if you need, you should access the database with raw method:

public function show() {      $tests = DB::table('test')         ->select("22 as twentytwo")         ->get();     foreach($tests as $test){         Log::info($test->twentytwo);     } } 
like image 37
DvdEnde Avatar answered Oct 13 '22 16:10

DvdEnde