Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 4 » Laravel Eloquent » 17.05.2014 18:02:49

Все! Проблема решена. Спасибо вам, Proger_XP. Результаты у меня повторялись, так как я просматривал var_dump’ом, то, что получил и еще забыл <pre> дорисовать, а там каждая модель имеет два разных свойства, в которых значения одинаковые.
Потратив еще некоторое количество времени на изучение Eloquent API я пришел к вот такому коду:
Немного прокомментирую его, возможно кому-то пригодится)

PHP
public function searchPost()
    {
        
$request Input::get('search');
        
$searchTerms explode(','$request);
        foreach (
$searchTerms as $i => $term)
        {
            
$searchTerms[$i] = trim($term);
        }
        
$searchTerms array_unique($searchTerms);//Здесь я уже имею массив с уникальными значениями
        
$posts null;

        foreach (
$searchTerms as $i => $term)
        {
            if(
$i == 0)
            {
                                
//Использую Eloquent вместо QueryBuilder, потому что выводить надо автора и категорию(relationships)
                
$posts Post::where('full_article''LIKE'"%{$term}%")
                    ->
orWhere('short_article''like'"%{$term}%")
                    ->
orWhere('title''like'"%{$term}%");
                continue; 
//Для первого ключевого слова значение переменной присваивается, а для остальных запрос                               составляется далее
            
}
            
$posts $posts->orWhere('full_article''LIKE'"%{$term}%")
                ->
orWhere('short_article''like'"%{$term}%")
                ->
orWhere('title''like'"%{$term}%");
                
/*Этот запрос вернет уникальную Eloquent коллекцию (Советую почитать о том, что такое Eloquent коллекция, потому как надо будет понимать почему вылазят ошибки запросов к БД и как их исправить). Что это значит? Допустим в базе есть две статьи:
                1) Привет, Вася!
                2) Привет, Петя и Вася!
                Когда поисковый запрос будет таким: Вася, Привет - он подойдет как к первой статье, так и ко второй и причем
                каждое ключевое слово "Вася" и "Привет" подходит к обеим статьям. Можно предположить, что на вывод пойдет 4
                статьи, то есть две статьи по два раза каждая, но как я написал выше, это возвратит уникальную коллекцию елементов.
                Знайте это, когда будете составлять похожие запросы, либо делать поиск, потому что найти решение этой проблемы
                заняло у меня немало нервов и времени.
        }

        return View::make('blog.posts.search-posts')
            ->with('posts', $posts->paginate(1));
    }

#2 Laravel 4 » Laravel Eloquent » 17.05.2014 13:25:37

happy_man
Ответов: 2

Доброго времени суток! Возникла проблема сделать поиск на сайт. Начал делать, но столкнулся с проблемой, а именно при выборке  из БД мне возвращается объект типа Collection, но результаты в нём повторяются.
Ниже приведу код екшена поиска:

.
        public function searchPost()
	{
		$request = Input::get('search');
		$searchTerms = explode(',', $request);
		foreach ($searchTerms as $term) 
		{
			$term = trim($term);
			if($searchTerms[0] == $term)
			{
				$posts = Post::where('full_article', 'LIKE', "%{$term}%")
					->orWhere('short_article', 'like', "%{$term}%")
					->orWhere('title', 'like', "%{$term}%")->first();
				continue;
			}
			$posts->merge(Post::where('full_article', 'LIKE', "%{$term}%")
					->orWhere('short_article', 'like', "%{$term}%")
					->orWhere('title', 'like', "%{$term}%")->get());
		}
		header('Content-Type: text/html; charset=utf-8');
		var_dump($posts);

		return View::make('blog.posts.search-posts')
			->with('posts', $posts->paginate(1));
	}

Заранее благодарен.

#3 Общий раздел » Frozennode administrator » 13.05.2014 16:59:14

happy_man
Ответов: 1

Здравствуйте! Помогите пожалуйста решить такую проблему. На сайте есть таблица категорий и таблица пользователей. Задача: сделать права на объекты, то есть администратор выбирает пользователей, которые будут редактировать ту или иную категорию. Создал таблицу "categories_users", в которой поля "category_id" и "user_id". В моделях прописал по методу belongsToMany("Имя модели", "таблица связей"). Создал конфиг для Frozennode и в нем в edit_fields указал соответствующие методы. Когда жму добавить/редактировать пользователя, то все это дело не сохраняется почему-то. Если кто-то сталкивался с этой проблемой, буду рад помощи. Или как вариант, можно ли как-то посмотреть запрос, который отправляется серверу БД. Заранее благодарен.

Подвал раздела