Laravel Как получить доступ к столбцу с номером имени таблицы?

Я делаю таблицу с номером 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

Изменить: в соответствии с Комментарий к парам

введите описание изображения здесь

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:  [] []

Ответы

Ответ 1

Лучший способ НЕ использовать Integer как имя поля. Это плохая практика. Но если вам нужно, вы должны получить доступ к базе данных с помощью необработанного метода:

public function show()
{
     $tests = DB::table('test')
        ->select("22 as twentytwo")
        ->get();
    foreach($tests as $test){
        Log::info($test->twentytwo);
    }
}

Ответ 2

Вы можете использовать следующий синтаксис, который содержится в разделе переменных переменных в документации PHP:

$obj->{'22'};

...

Можно также использовать фигурные скобки, чтобы четко разграничить имя свойства. Они наиболее полезны при доступе к значениям внутри свойства, содержащего массив, когда имя свойства составлено из нескольких частей, или когда имя свойства содержит символы, которые не являются действительными в действительности (например, из json_decode() или SimpleXML).

Ответ 3

Попробуйте следующее:

$obj->getAttributeValue("22");

Пожалуйста, сообщите об ошибке, если она не работает.

Ответ 4

Попробуйте следующее:

$col = '22';
$res = $obj->{$col};
var_dump($res);

Ответ 5

если вы всегда знаете, что это имя 22, вы можете сделать это.

 $myfield = 22;
 dd($obj->$myfield);

Я тестировал его, и он корректно возвращает значение в поле 22.

Ответ 6

Вы можете использовать атрибуты модели $map, чтобы дать вашему беспокойному столбцу другое имя. Попробуйте

$maps = ['22' => 'twentytwo'];

$hidden = ['22'];

$appends = ['twentytwo'];

Затем с вашим экземпляром модели

echo $model->twentytwo;

Ответ 7

$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

Ответ 8

Вопрос аналогичен этому:

Скрыть поле чисел от модели 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;
}

Проблема обсуждалась здесь:

https://github.com/laravel/framework/issues/8710

Ответ 10

Попробуйте использовать: Tablename::where('22','=','value')->first();

Ответ 11

$table = Tablename::get();

foreach ($table as $value){
   echo $value->22 // Getting column 22 from table
}

Ответ 12

Попробуйте использовать pluck()

$plucked = $collection->pluck('22');

$plucked->all();