4 votes

Laravel - Essai de récupération d'une propriété d'un non-objet sur ::first()

Ok, je reçois Trying to get property of non-object lorsque j'essaie d'obtenir les données de la base de données à l'aide de $settings = AdminSettings::first();

Voici le code du contrôleur

    <?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'));
    }
}

Voici le code modal

    <?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',
    ];
}

Ici, j'essaie de mettre le 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>

lorsque j'essaie de dd($settings); j'obtiens null

7voto

Alexey Mezenin Points 86781

Vous avez dit que le tableau est vide, alors faites des réglages l'objet optional :

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

0voto

Sohel0415 Points 7269

Utiliser trouver() pour obtenir une collection unique

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

Vous pouvez utiliser first aussi.

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

Et si vous avez besoin d'une collection complète, utilisez tous()

$settings = AdminSettings::all();

Selon vous, faites une simple vérification avec

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

0voto

YouneL Points 5464

Vous pouvez utiliser or également :

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

0voto

LegoBoy Points 120

Utiliser empty pour vérifier l'objet :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X