I make a table with number 22 as the column name. How to access this column?
content:
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
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:
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: [] []
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.
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.
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 .
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).
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); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With