Php laravel如何访问具有表的数字名称的列?

Php laravel如何访问具有表的数字名称的列?,php,arrays,database,laravel,object,Php,Arrays,Database,Laravel,Object,我用数字22作为列名创建了一个表。如何访问此列 内容: 我试过了 $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"]=>

我用数字22作为列名创建了一个表。如何访问此列

内容:

我试过了

$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
编辑:根据

编辑2: 要使问题简单明了:

迁移:

<?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()
    {
        //
    }

}
数据表:

和日志:

[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:  [] []
试试这个:

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

您可以使用PHP文档中的以下语法:

$obj->{'22'};

也可以使用大括号,以清楚地分隔属性名称。当访问包含数组的属性内的值时,当属性名由多个部分组成时,或当属性名包含无效字符时,(例如,来自json_decode()或SimpleXML),它们最有用

试试这个:

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

如果错误不起作用,请发布错误

您可以使用模型属性$maps为麻烦列指定不同的名称。试一试

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

$hidden = ['22'];

$appends = ['twentytwo'];
然后使用您的模型实例

echo $model->twentytwo;
可能重复的

同样的答案也适用于这里;您可以使用
$model->getAttribute('22')
获取模型属性的值。

尝试在以下位置使用:
Tablename::where('22','=','value')->first()

尝试使用


问题与此类似:

目前,这在Laravel中是不可能的,这一行代码位于第74行的
供应商\symfony\var dumper\symfony\Component\VarDumper\Cloner\VarCloner.php中

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;
}
这里讨论了这个问题:


如果你总是知道名字是22,你可以这样做

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

我对它进行了测试,它正确地返回了22字段中的值。

最好的方法是不要使用整数作为字段名。这是不好的做法。 但如果需要,应使用raw方法访问数据库:

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

你唯一没有尝试的事情是:
->{'22'}
@Marty你能再解释一下吗,这里有什么问题,或者我可以参考什么?非常感谢。有什么理由叫它
22
?最快的修复方法,也是最好的解决方案,是将其重命名为一个字符串,指明它是什么is@WebKenth我同意你的看法。我只是在无法修改数据库表时找到一种替代方法。还是谢谢你。我试过了,什么都没有得到。我已经编辑了我尝试过的问题的输出,没有结果。我已经编辑了问题$pri=Cloud\u printer::all()中的输出;foreach($pri as$v){Log::info($v->getAttributeValue(“22”);}production.ERROR:异常'BadMethodCallException',消息'Call to undefined method Illumb\Database\Query\Builder::getAttributeValue()'这没有意义
getAttributeValue
是雄辩模型的一个功能。您使用的是什么版本的Laravel?您是否可以发布
dd($pri)
?检查这个问题看起来Cloud\u打印机不是一个雄辩的模型。它似乎是一个自定义类。请把这个班级的代码贴在这里;它只会得到空值,比如:[2017-02-23 19:30:28]production.INFO:[][[2017-02-23 19:30:28]production.INFO:[][[2017-02-23 19:30:28]production.INFO:[][[2017-02-23 19:30:28]production.INFO:][[2017-02-23 19:30:28]production.INFO:[][[2017-02-23 19:30:28]production.INFO:][]就像一个符咒一样,它可以工作。稍后再回答,但请使用技巧。谢谢。这不是原始方法,原始方法使用
DB::raw()
if ($zval['zval_isref'] = (isset($queue[$i][$k])) ? ($queue[$i][$k] === $cookie) : false) {
   $zval['zval_hash'] = $v instanceof Stub ? spl_object_hash($v) : null;
}
 $myfield = 22;
 dd($obj->$myfield);
public function show()
{
     $tests = DB::table('test')
        ->select("22 as twentytwo")
        ->get();
    foreach($tests as $test){
        Log::info($test->twentytwo);
    }
}