我在那里,我会很高兴得到一些帮助。我正在尝试在Laravel中构建一个全文搜索功能,我几乎成功实现了我的目标,但突然间我停下来能够从数据库中检索所请求的对象。在某些时候,在没有我对什么或什么时候完全理解的情况下,代码被破坏了。我刚刚成功地能够通过语言检索查询的页面,开始处理其他内容,然后“BAM!”..除了“试图获取非对象的属性”错误之外,我无法获得任何其他错误。有没有人发现我的逻辑错误或任何错字?我试图用代码的几个变异解决这个问题,试图发现任何愚蠢的错误,但是还没有运气......
routes.php文件
Route::get('{lang}/search/{query}', 'HomeController@searchPages');
HomeController.php
public function searchPages($lang, $query) {
$cPage = Page::join('langs', 'langs.id', '=', 'pages.lang_parent_id')
->where('slug', '=', 'search')
->where('code', '=', $lang)
->select('langs.*', 'pages.*')
->first(array('langs.id AS language_ID'));
$searchResults = Search::acme($query, $lang);
return View::make('search.search')
->with('cPage', $cPage)
->with('searchResults', $searchResults);
}
模型/ page.php文件
class Page extends Eloquent {
public function scopeSearch($query, $search)
{
return $query->where(function($query) use ($search)
{
$query->where('title','LIKE', "%$search%")
->orWhere('body', 'LIKE', "%$search%");
});
}
}
的Acme /墙面/ search.php中
namespace Acme\Facades;
use Illuminate\Support\Facades\Facade;
class Search extends Facade {
protected static function getFacadeAccessor()
{
return 'search';
}
}
的Acme /搜索/ SearchServiceProvider.php
namespace Acme\Search;
use Illuminate\Support\ServiceProvider;
class SearchServiceProvider extends ServiceProvider {
public function register()
{
$this->app->bind('search', 'Acme\Search\Search');
}
}
的Acme /搜索/ search.php中
namespace Acme\Search;
use Illuminate\Support\Collection;
use Page;
class Search {
public function pages($search)
{
return Page::search($search)->get();
}
public function acme($query, $lang)
{
return new Collection(Page::join('langs', 'langs.id', '=', 'pages.lang_parent_id')
->where('code', '=', $lang)
->where('title', 'LIKE', '%'.$query.'%')
->orWhere('body', 'LIKE', '%'.$query.'%')
->get()
->toArray());
}
}
视图/搜索/ search.blade.php
echo $searchResults;
@foreach($searchResults as $searchResult)
<div class="search-result-container col-xs-12">
<div class="col-xs-3 col-sm-2">
<a href="/{{ $cPage['code'] }}/{{ $searchResult['slug'] }}">
<div class="thumbnail" style="background-image: url('{{ $searchResult['image'] }}');">
</div>
</a>
</div>
<div class="col-xs-9 col-sm-10 search-result-body">
<?php
$sr = HTML::decode($searchResult['body']) ;
$dom = new DOMDocument();
$dom->loadHTML($sr);
$node = $dom->getElementsByTagName('p')->item(0);
$sr_t = $node->nodeValue;
$sr_text = HTML::decode(str_limit($sr_t, 150, "..."));
$titles = $dom->getElementsByTagName('h1')->item(0);
$sr_title = $titles->nodeValue;
$title = HTML::decode(str_limit($sr_title, 150, "..."));
?>
<h3 class="search-result-title">
<a href="/{{ $searchResult['code'] }}/{{ $searchResult['slug'] }}">
{{ $searchResult['title'] }}
</a>
</h3>
<p>
<?php echo $sr_text; ?>
</p>
</div>
</div>
@endforeach
---- ----错误
尝试获取非对象的属性(查看:/ Users /.../ app / views / search / search.blade.php)
打开:/ Users /.../ bootstrap / compiled.php
(9812行) { $ obLevel = ob_get_level(); ob_start(); 提取物($ __数据); 尝试{ 包括$ __ path; } catch(\ Exception $ e){ $ this-&gt; handleViewException($ e,$ obLevel); } return ltrim(ob_get_clean());
答案 0 :(得分:0)
更改。
//$searchResult->code to
$searchResult['code']
答案 1 :(得分:0)
经过一些尝试,我终于通过在Collection的查询条件上切换顺序来实现这一点。 &#39;代码的条件&#39;应该在&#39;标题之后和&#39; body&#39;,像这样:
public function marave($search, $lang)
{
return new Collection(Page::join('langs', 'langs.id', '=', 'pages.lang_parent_id')
->where('title', 'LIKE', '%'.$search.'%')
->orWhere('body', 'LIKE', '%'.$search.'%')
->where('code', '=', $lang)
->get()
->toArray());
}
如果有人能解释我为什么会发生这种情况会很好;)