php 实际定义的Laravel“未定义数组键0”

6qftjkof  于 2023-01-29  发布在  PHP
关注(0)|答案(2)|浏览(440)

这真的很奇怪,Laravel告诉我“未定义的数组键0”,但是我能够回显Laravel看不见的值,并且我可以将它赋给一个变量。

$progress_check = db::select("select submitted, signed_off from users_to_stages where user_id = ? and sop_id = ? and stage_id = ?", [Auth::user()->id, $id, $do_stage_object->id]);
$thing = $progress_check[0]->submitted; // <-- $progress_check[0]->submitted contains 1

echo $thing;
exit;

我得到了从$thing返回的1。没有错误。但是!这个:

$progress_check = db::select("select submitted, signed_off from users_to_stages where user_id = ? and sop_id = ? and stage_id = ?", [Auth::user()->id, $id, $do_stage_object->id]);
$thing = $progress_check[0]->submitted;

if($thing) {
    $do_stages[$do_stage_object->id]['submitted'] = 1;
} else {
    $do_stages[$do_stage_object->id]['submitted'] = 0;
}

$thing = ...行上给出“Undefined array key 0”(未定义的数组键0),该行之前未引发错误并成功输出值(1)。
如果有帮助,下面是$progress_checkprint_rdd

print_r($progress_check);
Array
(
    [0] => stdClass Object
        (
            [submitted] => 1
            [signed_off] => 0
        )

)

dd($progress_check);
array:1 [▼
  0 => {#644 ▼
    +"submitted": "1"
    +"signed_off": "0"
  }
]

我不是Laravel或面向对象PHP(或面向对象的任何其他东西)的Maven,所以也许我只是错过了一些我应该知道的东西?另一双眼睛同样被难倒了,所以...更多的眼睛请!
我应该提一下,我运行的是Laravel 8.83.22。
编辑:使用db::table代替ItsGageH的答案会产生相同的错误和相同的情况,仍然能够回显/赋值它(只要我不在if中使用if),但DB结果中的内容略有不同:

print_r($progress_check);
Illuminate\Support\Collection Object
(
    [items:protected] => Array
        (
            [0] => stdClass Object
                (
                    [submitted] => 1
                    [signed_off] => 0
                )

        )

    [escapeWhenCastingToString:protected] => 
)

编辑:加分(虽然是虚分)如果有人能告诉我那644是什么?

6g8kf2rb

6g8kf2rb1#

您需要在Select语句之前先指定表,然后使用whereget
所以,你会考虑做:

DB::table('users_to_stages')
->select('submitted, signed_off')
->where('user_id', '=', Auth::user()->id)
->where('sop_id', '=', $id)
->where('stage_id', '=', $do_stage_object->id)
->get();

此处是Laravel选择语句的进一步引用

gmxoilav

gmxoilav2#

答案“Undefined array key 0”意味着你还没有定义任何第一个元素带有0键。[0 => Auth::user()->id]
看起来您可以在$progress_check处不使用[0]的情况下解决此问题:

$progress_check = db::select("select submitted, signed_off from users_to_stages where user_id = ? and sop_id = ? and stage_id = ?", [Auth::user()->id, $id, $do_stage_object->id]);
$thing = $progress_check->submitted;

if($thing) {
    $do_stages[$do_stage_object->id]['submitted'] = 1;
} else {
    $do_stages[$do_stage_object->id]['submitted'] = 0;
}

您的奖励积分:644是关于阅读或写文件的权限,这取决于chmod设置了什么。这个选项经常被选中,不要在意。

相关问题