Я пытаюсь собрать поисковый запрос, объединив две таблицы.У меня есть очень простой вымышленный сайт по недвижимости, где пользователь может искать списки, используя несколько вариантов, например, поиск по городам.Я настроил его так: у меня есть модель и таблица City
, которая содержит список городов и модель, контроллер и таблицу списка.
Таблица city
создается с помощью этихполя id
name
.А для таблицы listings
поле city_id
соединяется с полем id
в таблице city
.На моей домашней странице у меня есть возможность, когда пользователь вводит город, результаты отправляются на страницу результатов со всеми или любыми списками из этого города, используя таблицы сверху.Здесь я сталкиваюсь с проблемами.
Это ошибка, которую я получаю, когда запускаю запрос:
Trying to get property of non-object
Вот код для формы на домашней странице:
index.blade.php
<form action="/search" method="GET" role="search">
{{ csrf_field() }}
<div class="form-wrapper">
<input type="text" class="search-query" name="q" placeholder="Search citys" autocomplete="off">
</div>
<button type="submit" class="btn btn-success">SEARCH</button>
</form>
Вот мой контроллер, который выполняет запрос (listingcontroller
)
public function listingsresults()
{
$q = Input::get ( 'q' );
$listing = Listing::join('cities', 'listings.city_id', '=', 'cities.id')
->select('listings.city_id', 'cities.name')
->where ( 'name', 'LIKE', '%' . $q . '%' )
->paginate(8);
if (count ( $listing ) > 0)
return view ( 'front-end/listingsresults' )->withDetails ( $listing )->withQuery ( $q );
else
return view ( 'front-end/listingsresults' )->withMessage ( 'No Details found. Try to search again !' );
}
Моя модель листинга:
class Listing extends Model
{
//
protected $fillable = [
'street',
'city_id',
'state_id',
'price',
'beds',
'baths',
'sqft',
'descrip',
'category_id',
'user_id',
'state_id',
'fullpic_id',
'extrapicone_id',
'extrapictwo_id',
'extrapicthree_id',
'extrapicfour_id',
'',
];
// protected $primaryKey = 'id';
public function user(){
return $this->belongsTo('App\User');
}
public function state(){
return $this->belongsTo('App\State');
}
public function city(){
return $this->belongsTo('App\City');
}
public function category(){
return $this->belongsTo('App\Category');
}
public function fullpic(){
return $this->belongsTo('App\PhotoListing');
}
}
Модель моего города:
class City extends Model
{
//
protected $fillable = ['name'];
}
Любойидеи о том, почему я получаю эту ошибку?Я не уверен, если это потому, что я не структурирую свой запрос правильно или нет.Также это лучший способ структурировать модели, контроллеры и представления, которые я спрашиваю, потому что я все еще пытаюсь освоить Laravel и MVC в целом.