【问题标题】:Accessing nested object within array in PHP (Laravel)在PHP(Laravel)中访问数组内的嵌套对象
【发布时间】:2017-04-05 17:17:53
【问题描述】:

我为如何访问嵌套对象而苦苦挣扎。

    $dt = Carbon::parse($year.'-'.$month.'-1');
    $godziny = array();
    $gs = $lekarz->od;
    $gz = $lekarz->do;
    $ile = $gz-$gs;
    for($j=0; $j<4*$ile; $j++){
        if($j%4==0){
            $wm = "00";
        }
        else{
            $wm = ($j%4)*15;
        }
        if($gs+floor(($j/4)) < 10){
            $dz="0".$dz = $gs+floor(($j/4));
        } else{
            $dz = $gs+floor(($j/4));
        }
        $godziny[$j]['godzina'] = $dz;
        $godziny[$j]['minuty'] = $wm;
        if(!empty(Kolejka::where('data', 'LIKE', $year.'-'.$month.'-'.$day.' '.$dz.':'.$wm.'%')->get())){
            $godziny[$j]['odbyta'] = Kolejka::where('data', 'LIKE', $year.'-'.$month.'-'.$day.' '.$dz.':'.$wm.'%')->get();
            dd(get_object_vars($godziny[$j]['odbyta']));
           // $godziny[$j]['pacjent'] = Pacjent::where('id', '=', $godziny[$j]['odbyta']->{0}->pacjent_id);
        } else { 
            $godziny[$j]['odbyta'] = '';
        }
    }

除最后一部分外,一切正常。似乎我尝试以任何方式访问这些数据(通过使用 $godziny[$j]['odbyta']['pacjent_id'] 或通过 $godziny[$j]['odbyta']->pacjent_id)它刚刚赢了不行。我真的不知道该怎么办。

这是我的 [$j]['odbyta] 数据:

{
    "id": 1,
    "pacjent_id": "13",
    "lekarz_id": "1",
    "data": "2017-04-05 10:15:00",
    "odbyta": "0",
    "created_at": "2017-04-05 16:14:42",
    "updated_at": "2017-04-05 16:14:42"
}

即生成具有模式的数据的代码: $j 的最大数量是 36

$godziny[0]['godzina'] = $dz //That's for setting hour to array
$godziny[0]['godzina'] = $wm; //That's for assigning minutes
$godziny[0]['odbyta'] <- that's of value of object that i listed above

我怎样才能访问这个对象的数据? 所以 $godziny[0]['odbyta'] 可以给我它包含的对象的值吗?

【问题讨论】:

  • 我们需要更多信息,您发布的数据是您对其进行了 json_encode,还是原生如此?
  • Laravel 默认将所有内容编码为 json。您具体需要哪些数据?
  • 这就是它不起作用的原因,您需要在存储或阅读时json_decode()它。
  • 我误解了它是如何工作的。这不是json。一切正常。我可以显示这个对象,但我无法访问它的任何数据:x
  • 很难确定问题出在哪里,您没有提供足够的代码。 $j 是怎么设置的?看起来像是某种迭代器变量。

标签: php laravel object nested


【解决方案1】:

你不能只使用 Model->where...first() 吗?而不是作为对象访问它:

$godziny[$j]['odbyta'] = Kolejka::where('data', 'LIKE', $year.'-'.$month.'-'.$day.' '.$dz.':'.$wm.'%')->first();
$godziny[$j]['pacjent'] = Pacjent::where('id', '=', $godziny[$j]['odbyta']->pacjent_id);

【讨论】:

  • 我需要从这里访问“属性”:
  • Kolejka {#235 ▼ #connection: null #table: null #primaryKey: "id" #keyType: "int" +incrementing: true #with: [] #perPage: 15 +exists: true +wasRecentlyCreated: false #attributes: array:7 [▼ "id" =&gt; "1" "pacjent_id" =&gt; "13" "lekarz_id" =&gt; "1" "data" =&gt; "2017-04-05 09:00:00" "odbyta" =&gt; "0" "created_at" =&gt; "2017-04-05 16:14:42" "updated_at" =&gt; "2017-04-05 16:14:42" ] #original: array:7 [▶] #casts: [] #dates: [] #dateFormat: null #appends: [] ...
  • 当您执行 $godziny[$j]['odbyta']->pacjent_id 时,模型将通过魔术方法访问“属性”参数,您是否尝试复制并粘贴我提供的代码我的答案?没用?
  • 我使用了 pluck 函数来完成这个任务
猜你喜欢
  • 2017-08-31
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 2018-11-24
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 2022-11-09
相关资源
最近更新 更多