Свойство [веганский] не существует в этом экземпляре коллекции. Laravel - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь показать заголовок в зависимости от того, является ли определенный столбец в моей таблице 1 или 0. В моем контроллере я (отредактировал какой-то нерелевантный код):

 public function show(Company $id){

        $vegan = Company::find($id);
        $vegetarian = Company::find($id);

        return view('allProducts')->with([

            'vegan' => $vegan,
            'vegetarian' => $vegetarian,
        ]);
    }

и в моемview:

  @if($vegan->vegan == 1)
    <h3 class="text-center">Vegan</h3>
  @endif

Однако я получаю сообщение об ошибке

ErrorException (E_ERROR)
Property [vegan] does not exist on this collection instance. (View: C:\xampp\htdocs\EdenBeauty\resources\views\allProducts.blade.php)

Я пробовал следующее, но каждый раз получаю ошибки:

@if($vegan[0]->vegan == 1)

Это дает неопределенные ошибки смещения

Ответы [ 2 ]

1 голос
/ 04 октября 2019

В этой строке вы вводите Company в ваш метод show через параметр URL:

public function show(Company $id){ ... }

В этот момент $id является либо экземпляром Company, либо null. Вызов $vegan = Company::find($id) не имеет никакого смысла, и я на самом деле удивлен, что в этот момент в коде не появляется ошибка.

Кроме того, если вы используете инъекцию, присвойте переменной переменную правильноCompany $company, чтобы избежать путаницы, и ссылаться позже:

public function show(Company $company){
  $vegan = $company;
  $vegetarian = $company;
  // Or `$vegan = Company::find($company->id);`
  // (This is redundant, but demonstrates the syntax)

  return view("...")->with(...);
}

Либо удалите инъекцию и запрос:

public function show($id){
  $vegan = Company::find($id); // Note can use use `firstOrFail()`, etc.
  $vegetarian = Company::find($id);     
  ...
}

В любом случае, find() не возвращает Collection,поэтому $vegan->vegan не вернет «Свойство [веганский] не существует в этом экземпляре коллекции.», но что-то в вашем использовании относится к нему таким образом.

1 голос
/ 04 октября 2019

Проблема в том, что вам не хватает first() после ваших запросов:

$vegan = Company::find($id)->first();
$vegetarian = Company::find($id)->first();
...