我使用的是Laravel 10,我已经制作了一个名为pages的表,其中存储了网站的所有静态页面字段数据.

下表如下:

enter image description here

现在,为了检索此数据,我在控制器中添加了以下内容:

use App\Repositories\PageRepository;
use App\Models\Page;

class MainPagesController extends Controller
{
    protected $pageRepository;

    public function __construct(PageRepository $pageRepository)
    {
        $this->pageRepository = $pageRepository;
    }

    public function home()
    {
        $homeInfo = $this->pageRepository->getPageByType('home');
        return view('admin.pages.main.home', compact('homeInfo'));
    }
}

因此,我创建了一个名为PageRepository.php的存储库,如下所示:

namespace App\Repositories;

use App\Models\Page;

class PageRepository
{
    public function getPageByType(string $pageType)
    {
        return Page::where('pag_type', $pageType)->first();
    }

    public function getPageByName(string $pageName)
    {
        return Page::where('pag_name', $pageName)->first();
    }
}

所以它看起来很好很完美,但在刀锋,当我这样做的时候:

@dd($homeInfo->where('pag_name', 'hero_image')->first()->pag_value)

我得到了这个错误:

Attempt to read property "pag_value" on null

但是,带有hero_imagepag_name已经有一个名为layer.png的值,其他pag_name也会出现此错误!

那么,这里出了什么问题呢?我怎么才能解决这个问题呢?

推荐答案

根据您的代码$homeInfo不是一个集合,它是单个Page实例(->first()).因此,您不能在其上链接where方法.

使用

public function getPageByType(string $pageType)
{
    return Page::where('pag_type', $pageType)->get();
}

and in your Blade file, you can 使用 the where beca使用 $homeInfo will be a collection

@dd($homeInfo->where('pag_name', 'hero_image')->first()->pag_value)

Php相关问答推荐

如何根据键上的特定标准对对象数组进行排序?

Woocommerce自定义变体html表仅显示带值的列

PHP日期操作,将多个日期输出为格式化字符串

RediSearch PHP希望我在每次使用时定义所有字段

如何在php中生成包含第100秒的时间序列?

通过访问单个产品页面更新WooCommerce产品元数据

当主页和帖子的缩略图相同时,如何减少主页和帖子的缩略图

在PHP 8.2 Gloogle云引擎上加载大型php文件速度缓慢

从目录文件夹中获取文件并追加到 Select 下拉列表(选项)-wordpress/wc

如何按类别过滤自定义帖子类型

在WooCommercel邮箱通知上添加来自Apaczka插件的选定交付点

按类别层次 struct 过滤 Laravel 集合

woocommerce_available_ payment_gateways 过滤器挂钩多次触发

Woocommerce 中为空时隐藏显示变体自定义字段数据

在 WordPress 中将自定义帖子类型永久链接设置为 root

如何在 Phpunit 的静态提供程序中创建测试双打?

如何在 PHP 中对具有相同数组值的值求和

适当的时区处理 Laravel / Carbon

为什么在 phpunit 的开头测试 PHP_VERSION?

来自命令行的 PHP 没有给出正确的结果