Laravel по-русски

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

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

#1 Re: Laravel 6/7/8/9/10 » Laravel - Vue - Sidebar » 16.02.2022 14:56:04

Не уверен в правильности подсказки, но у самого с подобным было море проблем.
Вью отрабатывает только то, что прописано в шаблоне (в html). То есть, если у тебя в sidebar не прописан вызов getProducts, то оно и не вызовется.
При запущенном расширении срабатывает, так как он для выдачи результата сам делает запрос на срабатывание (ну или что-то такое)

#2 Re: Laravel 6/7/8/9/10 » Посчитать количество строк в соседней таблице по идентификатору » 16.02.2022 14:24:41

Здравствуйте.
Изучите сперва sql и если не можете написать запрос на laravel, то напишите sql"ьный запрос. За вас работу никто не хочет выполнять, могут только помочь.

select count(article.id) from article
left join users on users.id = article.user_id
where user.id = 666

Так мы получим ТОЛЬКО количество статей конкретного пользователя (666)
В ларавель, не помню как прописывается join, поэтому посылаю тебя сюда https://laravel.ru/docs/v5/queries#%D0% … 0%B8%D1%8F

Проще создать две модели User, Article. У юзера прописать связь

public function articles() {
       return $this->hasMany('App\User', 'user_id');
}

Пояснение
https://laravel.ru/docs/v5/eloquent-relationships#om

Получить пользователя со статьями по связи -

$users = User::with('articles')->where('столбец','значение')->get();
// И при выводе количество получаешь так - 
foreach($users as $key => $user){
    $user->articles->count();
}

#3 Re: Laravel 5.x » Как вставить данные в базу данных, которые пришли с яндекс кассы в дже » 24.03.2020 08:40:10

Json это же строка. И пока ты его не декодировал, то можешь сохранить в текстовое поле.
Я кстати, по другому делаю. Сохраняю лишь id уведомления/сообщения и когда нужно посмотреть что там с этой платёжкой, то делаю запрос на я.кассу по этому id

#4 Re: Laravel 5.x » Получить файл из компонента » 24.03.2020 08:30:00

Да можешь. Тебе нужно почитать про получение файла из base64.
Если сильно кратко, то вот. Давно было, поэтому много не вспомню.

public function createImage($data){

if(strpos($type,'png')){
	$img = imagecreatefrompng($data['path']);
...
// $newImg - потому что нужно было изменить фотку.
// $tmp_link - временное место для хранения данного изображения(опять же "фишка" моей задачи).
        imagepng($newImg,$tmp_link);
}elseif(strpos($type,'jpg') || strpos($type,'jpeg')){
	$img = imagecreatefromjpeg($data['path']);
...
        imagejpeg($newImg,$tmp_link);
}

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

#5 Re: Laravel 5.x » Помогите найти ошибку в коде отправки формы » 13.02.2020 13:17:30

Посмотри что у тебя на форме выводится в action, когда ты уже заполняешь форму в браузере.
Проверь вкладку нетворк в отладчике браузера, может там пишется какая то ошибка.
Попробуй файл веб переписать в контроллер ресурсов. Может тут происходит диссонанс у ларавеля.

#6 Re: Laravel 5.x » Непонятности в работе route и методов к ним привязанных » 05.02.2020 10:35:41

Да, роуты разные. И при любом из них принимающая функция должна отрабатывать. Но почему первый (tests) возвращает ошибку, а второй (test) входит в принимающую функцию. (урл при изменении роута так же меняю на соответствующий).
Надо бы попробовать другой контроллер проверить с такими же условиями.

>> используй PSR
-__- табы ван лав. . .

#7 Laravel 5.x » Непонятности в работе route и методов к ним привязанных » 31.01.2020 13:05:45

Alexandr5
Ответов: 2

Здравствуйте.
Имеется файл с route и соответственно контроллер.
route прописан (route ресурсов прописан первым)

Route::resource('tests', 'TestsController');
Route::get('tests/log/{id}', 'TestsController@getLogId');

В контролере TestsController принимающая функция -

public function getLogId($id) {
// Действия
}

Пишется 404 ошибка.
Если же путь прописать например

Route::get('test/log/{id}', 'TestsController@getLogId');

или

Route::get('log/{id}', 'TestsController@getLogId');

Тогда всё работает.
Хотя например есть через index и его дубль, то всё работает.

Route::get('tests/status/{id}', 'TestsController@index');
Route::post('tests/status/{id}', 'TestsController@postIndex');

Почему такое может происходить?

#8 Re: Laravel 5.x » Как вывести определенную ошибку? » 05.12.2019 16:15:56

Проверяй на количество значений в массиве. Если больше 1, то циклом выводить.

#9 Re: Laravel 5.x » Помогите исправить элементарную ошибку » 05.12.2019 16:13:19

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

#10 Re: Laravel 5.x » Помогите встроить orderBy в код. » 05.12.2019 16:09:24

$order = OnOrderType::with('models')->where('address', $onOrderType_address)->orderBy('id', 'desc')->first();

Должно быть так. Попробуй перед условием эту строку прописать и проверить, что ложится в $order.

#11 Веб-разработка » Запись строчек в файл с расширением .xls » 30.10.2019 10:54:08

Alexandr5
Ответов: 1

Здравствуйте.
Проблема / непонятки с построением ексель файлы при записи данных в него.
Сохраняю данные сразу в файл, который имеет расширение xls и открывается экселем (хотя везде пишут что это проблема и нужны библиотеки специальные. Не суть в общем). Созданный файл открываю на винде, кодировка летит. Ексель открывает с кодировкой CP1251 (через онлайн декодер узнал), поэтому перекодирую под винду и всё открывается нормально.
Самый смак в том, что пытаюсь заполнить два столбика, например - фамилия, имя. Строка строится в цикле так - $text .= $value.'; '.$key.';'."\r\n";
При обычных условиях в одну ячейку пишется и фамилия и имя. Если же добавить при записи в файл - fwrite($files, "\xEF\xBB\xBF"); тогда фамилия пишется в один столбец, имя в другой.
Вопрос, почему так? Почитал про эти символы - это либо пробелы, если в середине текста, либо указатели, что файл в кодировке utf-8.
И если кто то писал данные в ексель, то подскажите как нужно было разделить данные по столбцам.

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

        $text = '';
	foreach ($arrayData as $key => $value) {
		$text .= $value.'; '.$key.';'."\r\n";
	}
        $files = fopen($_SERVER['DOCUMENT_ROOT']."/file_text.xls","w+b");
        fwrite($files, "\xEF\xBB\xBF");
	$text = mb_convert_encoding($text,"windows-1251");
	fwrite($files, $text);
	fclose ($files);

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

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

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

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

#14 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#21 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. Как быть, что делать, что бы получить все поля, но группировать лишь по двум?

#22 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

#23 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

#24 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', '!=', 'нужный');
       });

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

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

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