Laravel по-русски

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

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

#1 Re: Laravel 5.x » Как сделать вывод сообщения если записей в бд нет то "Записей нет" » Вчера 10:12:34

Ааааа, точно точно. Ступил, скопировав не думая. Каюсь. Править уже не могу сообщение. . .

#2 Re: Laravel 5.x » Помогите реализовать связанные списки с помощью функции jQuery ajax. » Вчера 10:10:05

На сколько я понимая(очень плохо пока в этом всём разбираюсь), js через post должен сам получать разрешение (csrf-token) на переправку данных, а не из формы их брать, как в твоём случае прописанный ключик в ajaxSetup

#3 Re: Laravel 5.x » Как сделать вывод сообщения если записей в бд нет то "Записей нет" » 11.10.2019 13:16:05

Ммм нет. Ты не понял, куда вставлять данную проверку.

@if($brands->count() === 0)
  @foreach($brands as $brand)
    <tr>
         <td>
              {{$brand->alias}}
          </td>
           <td>
                {{$brand->description}}
           </td>
            <td>
                  {$brand->meta_title}}--}}
            </td>
     . . . 
@else
      {{$title}}
@endif

То есть сперва проверка на переменную, а потом уже код, который использует эту переменную.

#4 Re: Laravel 5.x » Проблемы с уведомлениями. » 11.10.2019 13:08:24

Во первых, код из файлов можно было подчистить, чтобы пустые функции не светились. Места меньше - читать проще.
Во вторых, проверял ли, что выводится из Auth::user() ? Есть ли там значение unreadNotifications. Попробуй \Auth::user(). По моему ещё есть конструкция \Auth::user()->find($user_id)

#5 Re: Laravel 5.x » Ленивая загрузка без eloquent? » 11.10.2019 12:49:14

Может я скажу что то совсем простое иии тупое или глупое, но ведь логично, что такое количество в выборке. Тебе нужно продумать саму выборку, как бы ты на чистом sql выбирал. Просто сперва получаешь таблицу версий, к каждой внутренней записи цепляешь энное количество записей из таблицы групп, в свою очередь к её записям ещё и продуктов записи, а к продуктам поля. . . Ну это перебор. Быть может джойны тут спасут.

#6 Re: Laravel 5.x » Группировка в запросе. Непонятно. » 12.09.2019 14:48:20

Ахаххх, хорошо быть мёртвым. Не нужно впахивать как живой big_smile

Есть таблица продуктов. В неё ложатся данные из . . .пока трёх таблиц. У неё два идентифицирующие поля, показывающих из какой таблицы товар - entity_type и entity_id. На странице выводятся данные товары из данной таблицы. Сейчас же, задача не просто выводить, а подсчитать сколько однотипного товара емеется и вывести его всего лишь раз с цифрой, обозначающей количество.
Например есть три игрушки - машинки, самолётики и корабли - для каждого типа своя таблица. Если раньше на странице выводилось.
Например - машинка белая, машинка чёрная, самолётик синий, самолётик красный, корабль жёлтый, корабль радужный.
Теперь должно вывести - машинка без разницы цвет, количество машинок. Самолётик без разницы цвет, количество самолётиков. Кораблик аналогично.

#7 Re: Laravel 5.x » Группировка в запросе. Непонятно. » 12.09.2019 13:46:07

Ну, у меня до сих пор нет приличного опыта в этом и я не вижу конкретной "неправильности" в отмене "правильности" big_smile
Решено, я имел ввиду - стала понятна ошибка, почему нельзя вывести все поля, а группировать только по некоторым.

Вот именно тут мне придётся часть функционала выборки из sql перенести на php, так как на sql я не могу выбрать всё, сортируя по двум полям. Придётся выбрать всё, а на пхп подсчитать схожие записи.

#8 Re: Laravel 5.x » Subquery в join » 12.09.2019 12:31:52

Это понятно и я не говорю всё менять. Так, на будущее, если не знал.:) Я тут сильно экспериментировал с запросами и открыл для себя, что иногда два запроса лучше одного, а Eloquent сам может разделить одну конструкцию на несколько запросов.
Кароооче. Твой запрос перенести мне слабо, но можно попробовать написать несколько запросов.

#9 Re: Laravel 5.x » Группировка в запросе. Непонятно. » 12.09.2019 12:26:35

Это всё понятно.
Под словами "все поля занести в group bу", это значит, что бы запрос прошёл и ошибка не высветилась. Естественно, что мне левые поля не нужны в  group by. Прямой запрос в БД проходит на ура, а вот через ларавель не выходит каменный цветок.
Судя твоему примеру - сгруппируем мы по возрасту, а имя и зарплата будут дублироваться. Ну и пусть, они же не уникальные. Главное что не будет дублей в колонке возраста, а имя или зарплата будет подставлено первое попавшееся значение из сгруппированных строк, по идее. Но это опять же в рамках допустимого, так как не уникальные поля.

П.С. А, всё понятно, всё решено. Для нуждающихся -
https://laracasts.com/discuss/channels/ … ot-working

#10 Laravel 5.x » Группировка в запросе. Непонятно. » 12.09.2019 11:05:51

Alexandr5
Ответов: 6

Здравствуйте.
Есть запрос

Product::where('', '')
	->select(\DB::raw('COUNT(*) AS counts, file_id, file_name'))
	->groupBy('file_id','file_name')->orderBy('created_at', 'desc')->get();

Если вот так, то всё хорошо. Если же мне нужны все поля в выборке, то
Ни так
   ->select(\DB::raw('COUNT(*) AS counts, product.*'))
Ни так не работает.
   ->select(\DB::raw('COUNT(*) AS counts, перечисление_всех_полей'))
И выходит ошибка
Syntax error or access violation: 1055 'БД.product.id' isn't in GROUP BY
То есть что бы все поля вывести, мне их нужно все заталкать в groupBy. Как быть, что делать, что бы получить все поля, но группировать лишь по двум?

#11 Re: Laravel 5.x » Subquery в join » 12.09.2019 10:30:30

Сложные у тебя запросы. Честно, с джойнами почти не работаю. Их заменяют такие функции как has, with, whereHas , подробнее например -
http://www.itmathrepetitor.ru/laravel-5 … -wherehas/
Правда результат и его обработка будет чуток отличной, зато код понятнее и меньше. А иногда и быстрее.
В кратце - что бы написать конструкцию типа Сontainer::with('weight', 'container_run')->where('id',1)->get(); Нужно что бы в модели Сontainer, которая работает по таблице container, была прописана связь (один к одному, один ко многим) к таблицам weight и container_run, которые так же имеют свои модели. Подробнее - https://laravel.ru/docs/v5/eloquent#%D0 … 0%B8%D1%8F
А вот джойнить чёт у меня не получается big_smile

#12 Re: Laravel 5.x » Как из простого массива двумя параметрами вывести инф. во view? » 12.09.2019 10:16:25

После сбора данных в контролере ты же отправляешь какие то данные во вьюшку? Как то она у тебя строится ведь.
Если нет, в первые это делаешь, тогда так -

public function  showAvto($id1, $id2){
    //	Магия тут 
     ...  
    .....
    return view('папка_в_каталоге_views.файл_в_папке_которая_в_каталоге_views', ['имя_переменной_которое_получаешь_в_файл_в_папке_которая_в_каталоге_views' => $переменная_которая_получена_в_этом_контроллере] );

}

В догонку
http://laravel.su/docs/5.2/views

#13 Re: Laravel 5.x » выбрать записи которых нет » 30.08.2019 15:42:07

Может тоже плюсом будут -

$this->builder->where(function($q){
   $arrId = Table2::where('title', 'нужный')->pluck('связующее поле таблицы 2');
   $q->whereNotIn('связующее поле таблицы 1',$arrId);
})

Если через джойны

$this->builder->leftJoin('table2', 'связующее поле таблицы 2', '=', 'связующее поле таблицы 1')->where(function($q){ 
             $q->whereNull( table2.id )->OrWhere('table2.title', '!=', 'нужный');
       });

#14 Re: Laravel 5.x » Подмена user » 02.08.2019 14:10:59

Вопрос. Если менеджер уже имеет связь с клиентами, то почему у него нельзя вывести всё тоже самое, что и у клиента?
Ну, то есть если клиенту ты сразу выводишь цену, скидку, то у менеджеру ты сперва даёшь выбрать клиента, а когда он выбирает, то запускаешь ту же функцию вывода цены, скидки что и для клиента.

#15 Re: Laravel 5.x » Как отправить куки в middleware Laravel? » 02.08.2019 13:58:43

Кстати, а ты куки свои смотришь или чужие?
Просто я как то раз затупил. Создавал куки для авторизованных пользователей, то есть для каждого свои и проверял есть ли такие, находясь в своей учётке. Естественно, в моём браузере небыло кук созданных для других пользователей.
Ну и ещё такой момент - когда куки отправил, то сперва должна загрузиться страница, а уже после, при повторной загрузке страницы они должны попадать в мидлвер.
Если у тебя стандартные функции пхп не работают, то по идее не должны и ларавельские работать. Я мельком глядел, вроде ларавельские на них основаны. Хотя не уверен.

#16 Re: Laravel 5.x » Как отправить куки в middleware Laravel? » 31.07.2019 09:51:32

Мне не понравилось работать с куками. И в итоге я на кэш перешёл.
А вообще вот это помогло по моему.
https://stackoverflow.com/questions/452 … r-45208138

Если нет, то стандартные функции от пхп по работе с куками однозначно должны работать.

#17 Re: Laravel 5.x » REST API для файлов, изображений » 31.07.2019 09:31:05

Вообще возможно же всё, было бы время.
Но я не понял проблемы. Список шаблон это же название файла шаблона, которые лежат в статичном месте. Если названия в БД хранятся , то берёшь из БД, или же ищешь папку с шаблонами, получаешь названия.
Аватар шаблона. . . ну картинки то точно в БД? Аналогично.
Файл шаблона. Ну, как я понимаю, есть имя, есть путь до файла -> есть шаблон?

#18 Laravel 5.x » Вывод формы на страницу через ajax » 30.05.2019 15:15:34

Alexandr5
Ответов: 1

Искал долго, нашёл случайно.
Оставлю это тут на будущее.
Задача - вывести форму в блок (например добавления коммента, по типу вконтактика). Форма - Kris\LaravelFormBuilder
Создаём файл шаблона для вывода формы -

{!! form_start($form) !!}
{!! form_row($form->image) !!}
{!! form_row($form->text) !!}
{!! form_row($form->submit) !!}
{!! form_end($form) !!}

В контроллере прописываем что нужно и в окончании выкидываем джисон массив, в который запихали отрендериную вьюшку шаблона, что выше прописали.

// ->render() обязателен.
$html = view('view.blockForm', compact('form'))->render();
return \Response::json(['html' => $html]);

В jquery просто выводим данную переменную.

$.ajax({
// params
}).done(function( data ) {
   blockThis.append(data['html']);
});

Ссыль оригинала

#19 Laravel 5.x » Работа с моделями » 24.05.2019 09:48:55

Alexandr5
Ответов: 0

Здравствуйте.
Подскажите как обратиться к свойствам модели, если название модели содержится в переменной?
Есть что-то типа -

$item=Product::with('image','like','comment.image','feedback.image')->find($id);
foreach ($item->getRelations() as $model => $value) {
   //должно быть
   // $item->image()->delete();
   // $item->comment->image()->delete(); и т.д.

   // Так не работает - undefined delete()
   $item->$model->delete();
   // Так тем более :D:D:D $item->$model()->delete()
}

#20 Re: Laravel 5.x » Получить ID строки » 04.04.2019 16:01:59

Я не уверен, но ->find() ищет по строчке, а не по массиву. Строчкой выше -get() вы получаете не строчку, а массив/объект/коллекцию(у меня сложно с наименованиями).

#21 Re: Laravel 5.x » Помогите сделать нужное вхождение таблиц » 07.03.2019 11:22:55

То есть типа такого
->hasMany('App\Models\JackpotBets', 'game_id')->where('JackpotBets.room','Jackpot.room');
тоже не работает?
(не проверял, просто предположил)

#22 Re: Laravel 5.x » Помогите сделать нужное вхождение таблиц » 07.03.2019 10:11:37

Как я понимаю, эти две модели у вас связаны. Скорее всего даже отношением один ко многим. Почитайте документацию по поводу функций - model::with(), model::has(), model::whereHas()
То есть если у тебя в моделе Jackpot прописано отношение типа

public function названиеОтношения() {
	return $this->hasMany('App\Models\JackpotBets', 'game_id');
}

Тогда ты сможешь прописывать конструкции, о которых написал выше.

#23 Re: Laravel 5.x » Использование глобальных scope » 07.03.2019 09:55:09

Спасибо, но вчера сделал немного по другому. В принципе как хотел, что б работали глобалки. То есть написал подобное -

$query = Model::when(count($param),function($q) use($param){
	return Search::scopeParams($q,$param);
});

Правда осталась проблема, если во входящих условиях нет нужных данных, ответ приходит пустая строка, а не часть для запроса. То есть -

public static function scopeParams($query, $params) {
    if('условие')
        return $query->where('условие');
    }elseif('нет удовлетворяющих параметров')
        return '';
}

Ниже идёт копирование запроса - $var = clone $query; И тут происходят ошибки.

#24 Laravel 5.x » Использование глобальных scope » 06.03.2019 15:17:49

Alexandr5
Ответов: 2

Здравствуйте.
Я не догоняю что и как нужно для глобального scope из документации. С локальной всё просто - в моделе, которую используем , должна быть функция с префиксом "scope" и эта функция просто пишется в условии при выборке без префикса scope.
Но как быть с глобальной, если у меня есть, например модели product и order. А scope выполняет одно и то же действие в обеих моделях, сортирует по дате создания например. Что бы не писать функцию scope дважды в двух моделях, хотелось бы её единожды в каком то левом классе написать и использовать в нужный момент.

#25 Re: Laravel 5.x » Как создать вывод ошибок валидации? » 06.03.2019 14:59:12

Насколько я понимаю, у тебя не отправляются данные с ошибкой в твой шаблон. То есть логика проста - если ошибка, то прерываем выполнение и идём показывать ошибку. Иначе выполняем код дальше.
Пример мой -
Контроллер.

if( $timeFrom > $timeTo ){
	// Правило изменил, так как не соответствие полей на форме, но требуется что б ошибочные поля подсвечивались, и было понятное сообщение 
	$rule = ['period_from'=>' ','period_to'=>' ','message'=>'Дата в поле "период от" должна быть меньше даты "до"'];
	return \Redirect::back()->withInput()->withErrors($rule);
}

Шаблон.

	@if ($errors->all())
		<div class="alert alert-danger">
			@foreach($errors->all() as $error)
			<p>{{ $error }}</p>
			@endforeach
		</div>
	@endif

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