【问题标题】:Using Laravel Query Builder returns Undefined property: stdClass error使用 Laravel 查询生成器返回未定义属性:stdClass 错误
【发布时间】:2017-05-09 15:16:30
【问题描述】:

我有一个在使用 laravel eloquent 方法之前有效的查询

$products = Product::where('category', 'ILIKE', '%'.$conditionTxt.'%')
                            ->orderBy('created_at', 'desc')
                            ->get();

但是在使用查询构建器方法之后

$products = DB::table('products')
                      ->where('category', 'ILIKE', '%'.$conditionTxt.'%')
                      ->orderBy('created_at', 'desc')
                      ->get();

它返回此错误:

未定义属性:stdClass::$inventory

这是我的模型和视图中指出错误的部分。

型号

public function inventory(){
    return $this->hasMany('App\InventoryRecord\InventoryRecord');
}

查看:

<td>
    <?php 
    for($i = 0; $i < count($val->inventory); $i++){
        if( $val->inventory[$i]->total_qty <= 50 )  { ?>
            <span style="color:#C00"><?php echo $val->inventory[$i]->total_qty.' -'; ?></span>
        <?php  }else{ ?>
            <span style="color:#25A602"><?php echo $val->inventory[$i]->total_qty.' -'; ?></span>
        <?php
        }
    }
    ?>
</td>

【问题讨论】:

  • 有人可以帮我解决这个问题吗? :(

标签: php laravel-5.2


【解决方案1】:

当您使用查询构建器方法时,它会返回一个包含结果的Illuminate\Support\Collection,其中每个结果都是PHP StdClass 对象(不是模型对象)的一个实例。您可以通过将列作为对象的属性访问来访问每一列的值。

但您无法访问模型关系,因为您有 PHP StdClass 对象。

我建议你,坚持使用 Laravel eloquent

【讨论】:

    【解决方案2】:

    您正在混淆两种不同的功能。 Laravel 提供了一个数据访问层,即 Query Builder。 Laravel 还提供了一个名为 Eloquent 的 ORM,它构建在 Query Builder 之上。

    当您使用 Eloquent 查询数据库时,您将获得 Eloquent 模型的实例。

    当您使用查询生成器查询数据库时,您将返回 stdClass 的实例。

    查询构建器不知道也不应该知道有关您的 Eloquent 模型的任何信息。如果你需要 Eloquent 功能(比如访问你的inventory 关系),那么你需要使用 Eloquent 来查询数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 2016-12-29
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 2018-11-15
      相关资源
      最近更新 更多