Php laravel如何访问具有表的数字名称的列?
我用数字22作为列名创建了一个表。如何访问此列 内容: 我试过了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"]=>
$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);
}
}