Как я могу исправить "Попытка получить свойство не-объекта" - PullRequest
1 голос
/ 28 октября 2019

У меня есть список избранного на моем веб-сайте для пользователей, и они могут добавить свой любимый дом в список желаний

все идет хорошо, но он не может видеть страницу списка желаний, и появляется ошибка:

Попытка получить свойство 'image' не-объекта

это мои отношения

class Home extends Model
{
  protected $guarded = [];
  public function favorite() 
  {
    return $this->hasMany(favorite::class,'house_id');
  }
}

class favorite extends Model
{
  protected $guarded = [];
  public function house()
  {
    return $this->belongsTo(home::class);
  }
}

моя индексная функция в контроллере:

public function index()
{
   $favorite = favorite::where('user_id',auth()->user()->id)->get();
   return view('favorite.index',compact('favorite'));
}

мой индекс:

@foreach($favorite as $fav)

  <tr>
    <td>
      <a href="property-detail.html"><img src="{{$fav->home->image}}" alt=""
                                                                            width="100"></a>
      </td>
      <td><a href="property-detail.html">{{$fav->home->title}}</a></td>
      <td>خانه خانواده</td>
      <td>اجاره</td>
      <td>
        <div class="price"><span>{{number_format($fav->home->price)}}</span><strong>تومان</strong>
        </div>
      </td>
      <td>
        <a href="#" class="action-button"><i class="fa fa-ban"></i> <span>حذف</span></a>
      </td>
    </tr>
  @endforeach

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Вы пытаетесь получить доступ к отношениям с неправильным именем. Вы определили связь с именем house:

public function house(){

    return $this->belongsTo(home::class);
}

Поэтому вам нужно использовать это имя для доступа:

@foreach($favorite as $fav)
    <tr>
        <td>
            <a href="property-detail.html"><img src="{{$fav->house->image}}" alt="" width="100"></a>
        </td>
        <td><a href="property-detail.html">{{$fav->house->title}}</a></td>
        <td>خانه خانواده</td>
        <td>اجاره</td>
        <td>
            <div class="price"><span>{{number_format($fav->house->price)}}</span><strong>تومان</strong>
            </div>
        </td>
        <td>
            <a href="#" class="action-button"><i class="fa fa-ban"></i> <span>حذف</span></a>
        </td>
    </tr>
@endforeach

Но у вас тоже будет проблема, если houseотношение обнуляется. Чтобы избежать, вы можете использовать решение, предложенное @Mohammed Aktaa:

optional($fav->house)->title
0 голосов
/ 28 октября 2019

Во-первых, ваша любимая модель не имеет домашнего отношения, ваше отношение является домашним, и когда вы хотите получить ее значение, вы можете использовать вспомогательную функцию optional, например:

optional($fav->house)->title
...