2015-10-20 3 views
0

Я следил за проектом Laracasts Project-Flyer и пришел к концу текущих видеороликов этой серии. Я решил уйти и сам расширить приложение.Ошибки при отображении реляционных данных

Я пытаюсь отобразить последние 3 листовки (или в моем случае, объявления) на главной странице вместе с изображением.

Я смог вытащить последние 3 записи и отобразить их на главной странице, но я старался следовать одному и тому же подходу к отображению изображений на классифицированной странице, для изображений для каждой категории на на главной странице.

Вот мой код, который я использовал.

объявления Модель сниппет:

<?php 

namespace App; 

use DB; 
use Illuminate\Database\Eloquent\Model; 

class classified extends Model 
{ 

... 

public function photos() 
{ 
    return $this->hasMany('App\classified_photo'); 
} 

... 

public static function getLatestClassifeds() 
{ 
    return DB::table('classifieds') 
    ->select('ad_title','description') 
    ->orderBy('created_at','desc') 
    ->take(3) 
    ->get(); 
} 

... 

Главная страница Контроллер:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Requests; 
use App\Http\Requests\classifiedRequest; 
use App\Http\Controllers\Controller; 
use App\classified; 
use App\classified_photo; 

class HomeController extends Controller 
{ 
    public function show() 
    { 
     $classifieds = classified::getLatestClassifeds(); 

     return view('pages.home', compact('classifieds')); 
    } 
} 

Главная Вид:

@foreach($classifieds as $classified) 
    <div class="col-xs-6 col-sm-4"> 
     <div class="col-xs-12"> 
      @if($classified->photos) 
       @foreach($classified->photos as $photo) 
        <img src="/{{$photo->thumbnail_path}}" class="img-responsive"> 
       @endforeach 
      @endif 
     </div> 
     <div class="col-xs-12"> 
      <div class="classified-desc"> 
       <h2>{{$classified->ad_title}}</h2> 
       <p>{{$classified->description}}</p> 
      </div> 
     </div> 
     <div class="col-xs-12"> 
      <div class="btn-group btn-group-justified" role="group" aria-label="..."> 
       <div class="btn-group" role="group"> 
        <button type="button" class="btn btn-default">Left</button> 
       </div> 
       <div class="btn-group" role="group"> 
        <button type="button" class="btn btn-default">Right</button> 
       </div> 
      </div> 
     </div> 
    </div> 
@endforeach 

Этот код возвращает эту ошибку, когда я пытаюсь посмотреть на домашней странице:

Undefined property: stdClass::$photos (View: /var/www/html/barrys-bikes.dev/resources/views/pages/home.blade.php) 

Как я уже сказал, показ 3 объявлений работает нормально, это именно эта проблема, пытаясь затем вытащить изображение для каждого из них.

+1

Что должно быть в объекте '-> photos'? Он нигде не определен. – Siper

+0

Только что отредактировал сообщение, чтобы теперь включить функцию photos(), которая находится в классифицированной модели. –

ответ

0

Проблемы есть, потому что вы используете DB::table()... вместо Красноречивого ОРМ. Сделайте примерно следующее:

public static function getLatestClassifeds() 
{ 
    return self::orderBy('created_at','desc') 
    ->take(3)->get(['ad_title', 'description']); 
} 
+0

Давай, а теперь я получаю эту ошибку: используя $ this, когда не в контексте объекта –

+0

@ Mike.Linford Извините, я забыл об этом. Обновленный ответ, я проверил их, и все работает нормально. – Siper

+0

Блестящий, это исправлено. Благодарю. Однако я получаю еще одну проблему. что было бы лучшим способом получить первое изображение, которое принадлежит классифицированному? В настоящее время я рисую все изображения, а затем, на мой взгляд, я jsut отображаю первый ключ в массиве. Я чувствую, что это неправильно. Я также сталкиваюсь с проблемой отображения изображения владельца места, если пользователь еще не загрузил изображение для классифицированных, которые будут показаны на главной странице. Как я могу проверить, не имеет ли классифицированного изображения, а если нет, отобразите что-нибудь еще? –

Смежные вопросы