【问题标题】:Laravel - Trying to get property of non-object on ::first()Laravel - 试图在 ::first() 上获取非对象的属性
【发布时间】:2018-06-15 13:04:36
【问题描述】:

好的,当我尝试使用 $settings = AdminSettings::first(); 从数据库中获取数据时,我得到了 Trying to get property of non-object

这里是控制器代码

    <?php

namespace App\Http\Controllers\AdminSettings;

use App\AdminSettings\AdminSettings;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class AdminSettingsController extends Controller
{
    public function index()
    {
        $settings = AdminSettings::first();

        return view('admins.settings.settings', compact('settings'));
    }
}

这里是模态代码

    <?php

namespace App\AdminSettings;

use Illuminate\Database\Eloquent\Model;

class AdminSettings extends Model
{
    protected $table = 'site_settings';
    protected $fillable = [
        'site_title', 'site_url', 'email_from', 'email_to', 'timezone', 'date_format', 'time_format',
    ];
}

我想在这里输入site_title into the input but I get Trying to get property of non-object

<div class="form-group">
                        <label for="site_title" class="form-label">Site Title</label>
                        <input type="text" class="form-control" name="site_title" id="site_title" value="{{ $settings->site_title }}"/>
                    </div>

当我尝试dd($settings); 时,我得到null

【问题讨论】:

  • 你确定,表中有记录吗?
  • @commonsense 不我确保表是空的,因为用户可以在访问页面后添加设置并单击保存更改,然后将设置添加到我只是想显示的数据库中`{{ $settings->tsite_title }} 一旦用户添加数据
  • 如果表为空,first() 将为空,因此尝试访问其上的数据将不起作用。就那么简单。在尝试使用之前检查是否存在设置记录。
  • @ceejayoz 哦,好吧,因为我记得以前做过这样的事情
  • 我会使用播种机,它使用基本数据创建第一条记录。

标签: php laravel laravel-5 laravel-query-builder


【解决方案1】:

你说表是空的,所以设置对象optional

{{ optional($settings)->site_title }}

【讨论】:

  • 我不知道optional() 助手的存在。甜!
  • 我收到Call to undefined function optional()
  • @$settings-&gt;site_title 改用这种方式
  • @Yosef 它在 5.5 中可用。如果您使用的是 5.4 及以下版本,则可以这样做 {{ $settings ? $settings-&gt;site_title : '' }}
  • 好的,谢谢,我刚刚看到它只适用于 5.5,而我仍在使用 5.4
【解决方案2】:

您也可以使用or 运算符:

{{ $settings->site_title or ''  }}

【讨论】:

    【解决方案3】:

    使用空来检查对象:

    @if(!empty($settings->site_title))
      {{ $settings->site_title }}
    @else
      "Nothing"
    @endif
    

    【讨论】:

      【解决方案4】:

      使用find() 获取单个集合

      $settings = AdminSettings::find($id);
      

      你也可以使用first

       $settings = AdminSettings::where('id',$id)->first();
      

      如果您需要整个集合,请使用all()

      $settings = AdminSettings::all();
      

      在你看来,做一个简单的检查——

      <input type="text" class="form-control" name="site_title" id="site_title" value="<?php echo ($settings)?$settings->site_title:'' >"/>
      

      【讨论】:

      • 无论您是否设置位置,首先都会收集一个集合
      猜你喜欢
      • 2015-09-22
      • 2017-03-20
      • 2014-03-25
      • 2015-01-25
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多