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: [] []
12 Answers
Answers 1
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).
Answers 2
Try this:
$obj->getAttributeValue("22");
Please post the error if it doesn't work
Answers 3
Try this:
$col = '22'; $res = $obj->{$col}; var_dump($res);
Answers 4
You can use model attribute $maps to give your troublesome column a different name. Try
$maps = ['22' => 'twentytwo']; $hidden = ['22']; $appends = ['twentytwo'];
Then with your model instance
echo $model->twentytwo;
Answers 5
$arr= Tablename::where('id', 1)->lists('22', 'id')->toArray(); $result = $arr[1]; As 1 is the $id var. I tried it in my localhost and it works
Answers 6
Possible duplicate of how can I use exists column with laravel model
The same answer applies here; you can use $model->getAttribute('22')
to get the value of a model attribute.
Answers 7
Try to use where: Tablename::where('22','=','value')->first();
Answers 8
$table = Tablename::get(); foreach ($table as $value){ echo $value->22 // Getting column 22 from table }
Answers 9
The question is similar to this:
Hide number field from Eloquent model in Laravel
Presently this is not possible in Laravel as seen in this line of code located in vendor\symfony\var-dumper\Symfony\Component\VarDumper\Cloner\VarCloner.php at line 74
.
if ($zval['zval_isref'] = $queue[$i][$k] === $cookie) { $zval['zval_hash'] = $v instanceof Stub ? spl_object_hash($v) : null; }
Here is the hack.
if ($zval['zval_isref'] = (isset($queue[$i][$k])) ? ($queue[$i][$k] === $cookie) : false) { $zval['zval_hash'] = $v instanceof Stub ? spl_object_hash($v) : null; }
Issue has been discussed here:
Answers 10
if you always know the name is 22, you can do this.
$myfield = 22; dd($obj->$myfield);
I tested it and it returns the value in the 22 field correctly.
Answers 11
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() { $test = DB::table('test') ->select("22 as twentytwo") ->get(); foreach($tests as $test) { Log::info($test->twentytwo); } }
Answers 12
Try use pluck()
$plucked = $collection->pluck('22'); $plucked->all();
0 comments:
Post a Comment