Laravel по-русски

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

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

#1 Re: Laravel 5.x » Помогите с фильтром результатов поиска в Laravel » 23.08.2019 17:58:55

Копаю дальше.
Мне нужно в методе

public function filter(Request $request)

Фильтровать результат из метода

public function search()

Переменную с результатами я могу передать. Но проблемма в том что во время выполнения метода filter массив из продуктами очищается так как никто не обращается к методу

public function search()

Подскажите как быть?

#2 Re: Laravel 5.x » Помогите с фильтром результатов поиска в Laravel » 23.08.2019 17:55:39

Решил вопрос так

public function search(){
     $products = 'The list of users';

     return $products
}

public function filter(){
     $products = $this->search()->products;
}

#3 Re: Laravel 5.x » Помогите с фильтром результатов поиска в Laravel » 23.08.2019 15:03:37

Если в контроллере есть две функции

public function search(){
     $products = 'The list of users';
}

public function filter(){
     $products
}

Можно ли получить переменную в другой функции?

#4 Laravel 5.x » Помогите с фильтром результатов поиска в Laravel » 23.08.2019 14:57:40

dmytrotus
Ответов: 3

Есть некая форма для поиска

<form action="/search" method="GET">

    <input value="{{request()->query('search')}}" type="text" name="search" placeholder="Search...">
    <button type="submit"><i class="searchicon"></i></button>
          
</form>

В web.php такой роут

Route::get('/search', 'ShowCustomerController@search');

В ShowCustomerController такая функция

public function search(){
        $search = request()->query('search');
        $products = Products::where('title', 'LIKE', "%{$search}%")->get();
        return view('searchresults')->with('products', $products);

После поиска слова "product1" у меня в URL отображается /search?search=product1

Сталкиваюсь с проблеммой когда потом хочу отфильтровать этот поиск.
На той же странице есть другая форма

<form action="/filter">
   <input value="0" min="0" name="minprice" type="number">
   <input min="0" name="maxprice" type="number">
</form>

в web.php такой роут

Route::get('/filter', 'ShowCustomerController@filter');

Дальше в контроллере

public function filter(Request $request)
    {
        $url = url()->previous().'/'.'filter?minprice=0&maxprice=2323'; ///такая строка мне нужна потом в URL
        $product = Product::with(***тут нужно принимать только те продукты которые уже выбраны по поиску search->query) ***)
        if ($request->has('minprice')) {
    		$users->where('price', '<', "%$request->minprice%");
    	}

    }

Вот я запутался и не знаю что делать дальше.
Так как на выходе после фильтрации в URL мне нужна строка.

/search?search=product1/filter?minprice=0&maxprice=2323

Я не понимаю что такое request()->query(); и не понимаю как сделать URL тот который мне нужен.
Помогите пожалуйста, тот кто разбирается.

#5 Re: Laravel 5.x » Маркетплейс на Laravel (Вопросы по разработке) » 22.07.2019 16:20:50

Спасибо большое за совет.
Изминение версии БД меня немножко озадачили.
Вот в чем суть.
На хостинге имею сайты на Wordpress и Laravel. Там стоит версия MySQL
Версия сервера: 5.7.16-10-log - Percona Server (GPL), Release 10, Revision a0c7d0d
На локальном Open Server же стоит версия MySQL 5.6 x64.
Есть еще опции MySQL 5.7, MySQL 8.0.
Проблемма в том что когда я обновляю версию БД на локалке то проэкты у меня ломаются. Wordpress пишет Ошибка установки соединения с базой данных
Laravel пишет SQLSTATE[HY000] [1049] Unknown database

Как теперь решить такую проблемму?:)

#6 Re: Laravel 5.x » Маркетплейс на Laravel (Вопросы по разработке) » 21.07.2019 18:31:15

Собственно первый вопрос:
При создании товара на маркетплейсе у него будет очень много разных характеристик ( цена, цвета, цена доставки, страна производства и так далее)
Все это предугадать невозможно ведь разные люди будут писать разное.
Все продукты которые будут добавляться пользователями я думаю помещать в одну таблицу в БД ( MYSQL)
Поскольку, как я уже написал, предугадать характеристики нереально, то создавать отдельный столбец для каждой характеристики нету смысла, а хорошо бы было записать все характеристики в ассоциативный массив в json и поместить в одну ячейку да и все.

jBeTwz2.jpg
Вопрос: какого формата столбец в таблице создать?

Schema::create('products', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->text('title');
            $table->increments('cat_id');
            $table->json('options'); // как создать эту ячейку? можетпросто $table->text('options');
            $table->timestamps();
        });

Когда пытаюсь создать такую таблицу то Laravel ругается вот так

Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'json not null, `created_at` timestamp null, `updated_at` timestamp null) default' at line 1 (SQL: create table `products` (`id` bigint unsigned not null auto_increment primary key, `title` text not null, `cat_id` int unsigned not null auto_increment primary key, `options` json not null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8mb4 collate 'utf8mb4_unicode_ci')


И подскажите как туда загнать данные из input'ов? Именно в ассоциативный массив.

#7 Laravel 5.x » Маркетплейс на Laravel (Вопросы по разработке) » 21.07.2019 18:09:11

dmytrotus
Ответов: 4

Появиалсь идея создать маркетплейс на Laravel.
Пока что только прописал себе в exel функционал, сейчас распределяю какие мне нужны будут Modules, Controllers таблицы в БД.

Вопрос к сообществу такой: может кто делал что-то подобное? Интересно бы было почитать любой опыт.

А пока что у меня просьба у модераторов не удалять тему. Я думаю у меня будет появляться много вопросов по разным ньюансам и я их буду тут задавать, прямо в теме. Может людям потом пригодится.

#8 Re: Laravel 5.x » Очистка кеша Laravel 5.8 » 21.07.2019 17:01:04

Еще не дошел до этого. Сейчас решаю проблемму просто обновляя название файла стилей...
Хотя повторюсь, на локалке все работает как часы...

#9 Re: Laravel 5.x » Как правильно работать с Vue.js в Laravel 5.8 » 15.06.2019 10:56:23

Напишу как я добавляю еще один элемент .vue
Захожу в папку /resources/js/components/ и создаю файл myNewComponent.vue с содержанием

<template>
   I'm second Vue component
    </div>
</template>

<script>
    export default {
        mounted() {
            console.log('My new component mounted')
        }
    }
</script>

Дальше иду в файл /resources/js/app.js
И там дописываю

require('./bootstrap');

window.Vue = require('vue');

Vue.component('example-component', require('./components/ExampleComponent.vue').default);

Vue.component('myNewComponent', require('./components/myNewComponent.vue').default); ///Тут обьявляю новый компонент

const app = new Vue({
    el: '#app'
});

Дальше в каком то view пишу
<div id="app">
<myNewComponent></myNewComponent>
</div>

<script src="js/app.js"></script>

И компонент не выводится...

Что я делаю не так?

#10 Laravel 5.x » Как правильно работать с Vue.js в Laravel 5.8 » 15.06.2019 10:49:43

dmytrotus
Ответов: 2

Привет всем.
Как все знают Vue.Js установлен по дефолту в Laravel.

Я захожу в папку /resources/js/app.js и вижу там

require('./bootstrap');

window.Vue = require('vue');

Vue.component('example-component', require('./components/ExampleComponent.vue').default);

const app = new Vue({
    el: '#app'
});

Дальше в welcome.blade вставляю этот компонент

<example-component></example-component>
<!-- need to put it before JQuery to let vuejs works -->
<script src="js/app.js"></script> 

Содержание этого examplecomponent.vue который находится по адресу прикрепляю

<template>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Example Component</div>

                    <div class="card-body">
                        I'm an example component.
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        mounted() {
            console.log('Example Component mounted.') // эту строку я изменил
        }
    }
</script>

На первый взгляд все работает, так как через браузер выводится "I'm an example component."
Но в консоли выводится "Component mounted" вместо "Example Component mounted."
Кроме того я изменил название "examplecomponent.vue" на "example2222component.vue"
а все и дальше работает....
Впечатление что где то кешируется компонент и без толку что я что-то меняю.

Если я пытаюсь добавить еще один элемент .vue то ничего не работает.

Запускаю я свой проэкт не через

php artisan serve

А просто через OpenServer.
Кто с таким сталкивался, обьясните пожалуйста как правильно работать с теми элементами в Laravel....:|

#11 Laravel 5.x » Очистка кеша Laravel 5.8 » 20.05.2019 10:34:18

dmytrotus
Ответов: 3

Привет всем. Скорее всего это уже заезженная тема но тем не менее, я не мог найти решения своей проблеммы в интернете.
Нужно почистить кеш на проэкте Laravel 5.8.
Проблемма появилась после переноса проэкта на хостинг. На локальном сервере все работает хорошо.
Пробовал уже писать команды

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

Эти команды мне не помогают, потому что файлы css и js остаются старые даже после очистки кеша браузера ctrl+f5.
Кроме того фотографии после замены в папке storage остаются старые.

#12 Re: Хорошие практики (FAQ) » Как лучше сделать варианты продуктов Laravel » 05.05.2019 22:14:02

А если у Вас в базе данных 4 цвета и 4 размера.
При этом получается 16 вариантов.
Вы по одному каждый вариант в БД пишете?
Можно ли сделать так чтобы в БД сразу создались вме комбинации, тоесть на основании 2ух столбцов создался третий стобец в котором будут все комбинации вариантов из первых двух?

#13 Хорошие практики (FAQ) » Как лучше сделать варианты продуктов Laravel » 05.05.2019 18:06:18

dmytrotus
Ответов: 3

У кого есть опыт, подскажите как лучше реализовать продукты из вариантами.
Хотелось бы чтобы в админке было похожее на WooCommerce из Wordpress но чтобы удобно было добавлять много варантов через Excel. Чтобы таблица была не сильно замудренная. Пока что дошел до такого.
В админке меню, похоже на Woocommerce

OzQGF.jpg

У Woocommerce есть такая штука где можно например из 4 вариантов цвета и 4 вариантов размера создать сраза 16 вариантов товара. Не понимаю как это реализовать на PHP.
Вот скрин что у меня в БД.

s6I2N.jpg

Я сразу создавал столбцы в таблице так как знал какие атрибуты у меня будут. Но если я захочу дописать еще один атрибут то не хотелось бы переделывать целую таблицу в бд. Поделитесь пожалуйста опытом кто знает как это делаеют? Были мысли сделать еще одну таблицу (промежуточную) где будут создаватся варианты, а их уже привязывать к таблице со значениями.

#14 Re: Laravel 5.x » Сохранение фото в редакторе Summernote Laravel 5.8 » 30.04.2019 09:16:27

p.s. нашел что-то похожее на решение этой проблеммы в интернете, но пока не тестил.
Вставлю тут код, может кому пригодится.
Файл из view:

@section('content')
{{Form::open('PostController@edit')}}
  <input type="hidden" name="post_id" value="1">
  <legend>Message</legend>
  <textarea id="editor" name="message"></textarea>
  <button type="submit">Save</button>
{{Form::close()}}
@stop

@section('scripts')
  $('#editor').summernote();
@stop

Файл контроллера

<?php
/**
 * This exemple shows how to parse base64 encoded images (submitted using Summernote), save them locally 
 * and replace the 'src' attribute in the submited HTML content
 *
**/
use Intervention\Image\ImageManagerStatic as Image;
class PostController {
  
	public function edit(){
		$post = Post::findOrFail(Input::get('post_id'));  // Post object exemple
		$message = Input::get('message'); // Summernote input field
		
		$dom = new DomDocument();
		$dom->loadHtml($message, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    
		$images = $dom->getElementsByTagName('img');
		
		
		
		// foreach <img> in the submited message
		foreach($images as $img){
			$src = $img->getAttribute('src');
			
			// if the img source is 'data-url'
			if(preg_match('/data:image/', $src)){
				
				// get the mimetype
				preg_match('/data:image\/(?<mime>.*?)\;/', $src, $groups);
				$mimetype = $groups['mime'];
				
				// Generating a random filename
				$filename = uniqid();
				$filepath = "/images/$filename.$mimetype";
	
				// @see [url]http://image.intervention.io/api/[/url]
				$image = Image::make($src)
				  // resize if required
				  /* ->resize(300, 200) */
				  ->encode($mimetype, 100) 	// encode file to the specified mimetype
				  ->save(public_path($filepath));
				
				$new_src = asset($filepath);
				$img->removeAttribute('src');
				$img->setAttribute('src', $new_src);
			} // <!--endif
		} // <!--endforeach
		
		$post->message = $dom->saveHTML();
		$post->save();
		
		Session::flash('message','Post updated!');
		return Redirect::back();
  	}
}

#15 Re: Laravel 5.x » Сохранение фото в редакторе Summernote Laravel 5.8 » 30.04.2019 09:14:18

Вот копирую из миграций smile

$table->text('content')->nullable();

Мне кажется длинна столбца подходит.
Но там нету функционала, который бы сохранял фото в какую-то папку, а дальше генерировал

<img src="путь-к-сохраненному-изображению">

А как вы считаете?

#16 Laravel 5.x » Сохранение фото в редакторе Summernote Laravel 5.8 » 30.04.2019 00:15:46

dmytrotus
Ответов: 3

Когда поставил в проэкте laravel редактор Summernote то там при сохранеии возникает ошибка.

SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'content' at row 1 (SQL: update `posts` set `content` = <h3>DIGITAL IPSUM<img 

Может кто подскажет что делать?
Вообще у таких редакторов есть функционал чтобы сохранять фото?

#17 Re: Laravel 5.x » Редактирование профиля » 30.04.2019 00:01:31

Привет.
Создаешь форму.

<form action="/user-update/{{ $user->id }}"
method="POST">
@csrf (не забываем токен)
<input name="name">
<input age="age">
<button type="submit"></button>
</form>

После этого создаешь роут

Route::post('/user-update/{userId}', 'usercontroller@updateUser');

Дальше в этом контроллере делаешь обновление значений в БД

public function updateUser(Request $request, User $User){
        $User->title = $request->name;  //пишем данные в таблицу
        $User->description = $request->age;//пишем данные в таблицу
        $User->save(); //сохраняем
        request()->session()->flash('success', 'Обновлено!'); //выводим сообщение про обновление
        return back(); 
}
    {

Внимательно смотри чтобы в контроллере была подключена модель

use App\User; use Illuminate\Http\Request;

Я не знаю как у тебя называется модель и таблицы в базе данных.
Но принцип написал.
Сначала делаешь форму, потом из нее передаешь данные в контроллер. В контроллере обновляешь данные в базе.

#18 Laravel 5.x » Подключение node_modules в Laravel 5.8 » 29.04.2019 23:43:06

dmytrotus
Ответов: 1

Не могу подключить ни одного js из папки node_modules
Конкретно работал с CKEditor и увидел эту проблемму.
Поставил используя

npm install --save @ckeditor/ckeditor5-build-classic

После этого попытался подключить

<script src="{{asset('node_modules/@ckeditor/ckeditor5-build-classic/build/ckeditor.js')}}"></script>

Не работает. Просто в браузере захожу на адрес скрипта - отдает 404 ошибку.
При этом пакет установлен в папку vendor при помоши

composer require

Работает без проблем.
Сначала думал проблемма в файле

.gitignore

Удалял оттуда строку и назад подключал. Разинцы нет...

Помогите советом.
Как работать с теми модулями..

#19 Laravel 5.x » Передать данные из View в Controller » 15.04.2019 22:19:01

dmytrotus
Ответов: 2

Разрабатываю на Laravel 5.8

На фронтенде вывожу целую категорию продуктов

@foreach($products as $product) 
{{$product->name}}
<a href="/{{ $product->slug }}"></a>
@endforeach 

{{$category->name}}

У меня в БД три таблицы с разными продуктами, тоесть в зависимости от категории продукты могут выводиться из разных таблиц.

Проблемма в том что мне нужно для вывода товара передать информацию про его категорию в Controller.
И нужно в идеале передать параметр {{$category->name}} в controller

Роут выглядит так

Route::get('{slug}', 'MyController@single');

Внутри MyController такое

public function single($slug)
{ 
   как тут мне получить значение category->name ??
}

Помогите пожалуйста.

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