Ошибка “Undefined property: Illuminate\Database\Eloquent\Builder”

409
11 марта 2017, 04:37

Пытаюсь сделать выборку по id в своем проекте по документации (стоит laravel 5.3).

файл routes/web.php:

Route::get('/search/propertyprofile/{id}', [
'uses' => 'PropertyProfileController@getPropertyProfile',
'as' => 'sh.search.propertyprofile'
]);

В этом роуте я написал адресс первым параметром, потом использую контроллер и экшен и оно должно переходить на указанную вьюху (тут ВСЁ хорошо, если вьюха с кодом вывода Hello world и без параметров)

Дальше я создаю экшен (с параметрами $id и переменная $request), в котором в $properties я заношу данные из модели (где параметр id соответствует переменной $id) и возвращаю вьху (где параметр представления и второй параметр данные из таблицы БД заносятся в $properties)

PropertyProfileController:

use App\Property;
use Illuminate\Http\Request;
class PropertyProfileController extends Controller
{
public function getPropertyProfile($id,Request $request) {
    $properties = Property::where('id', $id);
    return view('sh.propertyprofile', ['properties' => $properties]);
}   }

модель Property (тут вроде все понятно):

class Property extends Model
{
protected $fillable = ['id','imagePath', 'title', 'description',  ];
}

Во вьюхе я вызываю данные title и imagePath из переменной $properties (в которую они занесены из таблицы БД):

@extends('layouts.master')
@section('content')
   <img src="{{ $properties->imagePath }}" alt="..." class="img-responsive">
   <h3>{{ $properties->title }}</h3>
@endsection

Выдает ошибку :

Undefined property: Illuminate\Database\Eloquent\Builder::$imagePath (View: /var/www/projects/auth.laravel.com/resources/views/sh/propertyprofile.blade.php)

Логи апача :

"GET /search/propertyprofile/8 HTTP/1.1" 500 43913 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0"

Почему он говорит неопределенная переменная imagePath??Подскажите, пожалуйста, ГДЕ я ошибся или что в моих суждениях не так....(делал по документации https://laravel.com/docs/5.4/routing#route-parameters)

Answer 1

В файле PropertyProfileController вы написали условие, но не сделали выборку, правильно будет так:

$properties = Property::where('id', $id)->first();

Если id это ваш PK, то можно просто сделать:

$properties = Property::find($id);
Answer 2

Зачем вам использовать Request $request в данной функции если оно даже не используется?

public function getPropertyProfile($id,Request $request) {
    $properties = Property::where('id', $id);
    return view('sh.propertyprofile', ['properties' => $properties]);
}

Для правильности конечно следует убрать, но если вы намерены его использовать в дальнейшем то лучше поменяйте местами иначе функция не будет работать

public function getPropertyProfile(Request $request, $id) {
    $properties = Property::find($id);
    return view('sh.propertyprofile', ['properties' => $properties]);
}
READ ALSO
Не работает cUrl с поддоменом

Не работает cUrl с поддоменом

Пытаюсь с основного домена (domainru) отправить cUrl запрос на поддомен (s1

305
При вызове phpinfo() — выдает ошибку: &#171;502 Bad Gateway&#187;. В чем может быть причина?

При вызове phpinfo() — выдает ошибку: «502 Bad Gateway». В чем может быть причина?

Здравствуйте! Установил phpstormПрописал путь к php-интерпритатору, который был установлен вместе с OpenServer

296
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given

ЗдравствуйтеПишу скрипт на php, который по запросу пользователя выводит список документов, по 10 на страницу, все ок, все работает

278
Вырезать часть текста из строки

Вырезать часть текста из строки

ЗдравствуйтеЕсть строка, в которой содержится текст типа:

371