Я делаю таблицу с номером 22 в качестве имени столбца. Как получить доступ к этому столбцу?
содержание:
Я попробовал 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
никто не работает.
отредактированный в ответ на полученный ответ: также получите значение null.
var_dump($orders[0]); var_dump($orders[0]->id); var_dump($orders[0]->{'22'}); $col = '22'; $res = $orders[0]->{$col}; var_dump($res);
вывод:
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
,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
,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
,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
Изменить: согласно замечанию Параса
Edit2: сделать вопрос простым и понятным:
миграция:
<?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() { // } }
Модель:
<?php class Test extends Eloquent { }
контроллер:
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")); } }
Таблица данных:
и журнал:
[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: [] []
Лучший способ НЕ использовать Integer как имя поля. Это плохая практика. Но если вам нужно, вы должны получить доступ к базе данных с помощью необработанного метода:
public function show() { $tests = DB::table('test') ->select("22 as twentytwo") ->get(); foreach($tests as $test){ Log::info($test->twentytwo); } }
дваpublic function show() { $tests = DB::table('test') ->select("22 as twentytwo") ->get(); foreach($tests as $test){ Log::info($test->twentytwo); } }
Вы можете использовать следующий синтаксис, который содержится в разделе переменных переменных в документации PHP:
$obj->{'22'};
…
Также можно использовать фигурные скобки , чтобы четко разграничить имя свойства. Они наиболее полезны при доступе к значениям внутри свойства, содержащего массив, когда имя свойства составлено из нескольких частей, или когда имя свойства содержит символы, которые в ином случае недействительны (например, из json_decode () или SimpleXML).
Попробуй это:
$obj->getAttributeValue("22");
Пожалуйста, отправьте сообщение об ошибке, если оно не работает
Попробуй это:
$col = '22'; $res = $obj->{$col}; var_dump($res);
если вы всегда знаете, что это имя 22, вы можете это сделать.
$myfield = 22; dd($obj->$myfield);
Я проверил его, и он правильно возвращает значение в поле 22.
Вы можете использовать атрибуты модели $ map, чтобы дать вашему неприятному столбцу другое имя. Пытаться
$maps = ['22' => 'twentytwo']; $hidden = ['22']; $appends = ['twentytwo'];
Затем с примером модели
echo $model->twentytwo;
$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
Вопрос аналогичен этому:
Скрыть поле чисел от модели Eloquent в Laravel
В настоящее время это невозможно в Laravel, как показано в этой строке кода, расположенной в 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; }
Вот хак.
if ($zval['zval_isref'] = (isset($queue[$i][$k])) ? ($queue[$i][$k] === $cookie) : false) { $zval['zval_hash'] = $v instanceof Stub ? spl_object_hash($v) : null; }
Проблема обсуждалась здесь:
Возможный дубликат того, как я могу использовать существующий столбец с моделью laravel
Тот же ответ применяется здесь; вы можете использовать $model->getAttribute('22')
чтобы получить значение атрибута модели.
Попробуйте использовать где: Tablename::where('22','=','value')->first();
$table = Tablename::get(); foreach ($table as $value){ echo $value->22 // Getting column 22 from table }
Попробуйте использовать pluck ()
$plucked = $collection->pluck('22'); $plucked->all();