Laravel по-русски

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

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

#2 Laravel 5.x » Как в redirect часть url представить с помощью переменной? » 23.06.2017 17:43:27

laravelNewbie
Ответов: 1

По дефолту можно сделать что-то в этом духе:

PHP
return redirect('products/1');

Тем самым пользователь перейдёт на страницу ’products/1’. Но как быть, если эту единичку я храню в переменной? Как можно вторую часть юрл передать переменной? Что-то вроде этого что бы было:

PHP
$id 1;
return 
redirect('products/' $id);

#4 Laravel 5.x » Get Set global variable in Class » 07.06.2017 11:37:08

laravelNewbie
Ответов: 2

Каким образом возможно создать глобальную переменную в классе, что бы в дальнейшем можно было получать и изменять её значение?

#5 Re: Laravel 5.x » Не могу разобраться с запросом » 16.02.2017 02:14:24

Сделал через query builder и с помощью массива передал те параметры. Всё теперь работает

#6 Laravel 5.x » Не могу разобраться с запросом » 15.02.2017 23:24:02

laravelNewbie
Ответов: 1

Когда в phpMyAdmin  делаю следующий SQL запрос:

SELECT products.id FROM products, characteristics 
                WHERE products.id = characteristics.pr_id AND products.c_id = 1
                AND characteristics.value IN ('8-core', 'Quad-Core') 
                AND price BETWEEN 50 AND 5000 GROUP BY products.id

Всё работает правильно. А когда в модели пытаюсь это сделать следующим образом, то на выходе получаю пустой массив

        $products = DB::select('SELECT products.id FROM products, characteristics 
                WHERE products.id = characteristics.pr_id AND products.c_id = ?
                AND characteristics.value IN (?) 
                AND price BETWEEN ? AND ? GROUP BY products.id', [$catId, $query, $minPrice, $maxPrice]); 
        dd($products);

В чём может быть проблема?
PS: если во втором случае передавать только  один параметр с помощью переменной $query(например 'Quad-Core') то выдаёт правильный результат. Но как только передаю два и более, то получаю пустой массив.

Контроллер:

        $values = Input::get('value');
        $category = Input::get('cat');
        $brand = Input::get('brand');
        $minPrice = Input::get('min_price');
        $maxPrice = Input::get('max_price');
        $query = implode('", "', $values);

        $product = new Product();
        $products = $product->getProductsByPar($query, $minPrice, $maxPrice, $category, $brand);

Модель

    public function getProductsByPar($query, $minPrice, $maxPrice, $cat, $brand)
    {
        $category = new Category();
        $brands = new Brand();
        $minPrice = (int)$minPrice;
        $maxPrice = (int)$maxPrice;
        $catId = $category->getCategoryId($cat)->id;

        if($brand == 'none')
        {
        $products = DB::select('SELECT products.id FROM products, characteristics 
                WHERE products.id = characteristics.pr_id AND products.c_id = ?
                AND characteristics.value IN (?) 
                AND price BETWEEN ? AND ? GROUP BY products.id', [$catId, $query, $minPrice, $maxPrice]);            
        }
        else
        {
        $brandId = $brands->getBrandId($brand)->id;
        $products = DB::select('SELECT products.id FROM products, characteristics 
                WHERE products.id = characteristics.pr_id AND products.c_id = ?
                AND products.b_id = ? AND characteristics.value IN (?) 
                AND price BETWEEN ? AND ? GROUP BY products.id', [$catId, $brandId, $query, $minPrice, $maxPrice]);             
        }
        dd($products);
        return $products;

#8 Re: Laravel 5.x » Как реализовать данный запрос » 03.02.2017 01:53:53

Всем спасибо, уже работает:

$getAll = DB::table('categories')
                    ->leftJoin('products', 'products.c_id', '=', 'categories.id')
                    ->leftJoin('brands', 'brands.id', '=', 'products.b_id')
                    ->groupBy('brands.name')
                    ->groupBy('categories.name')
                    ->get([
                        'categories.id as id',
                        'categories.name as cat',
                        'brands.name as brand'
                    ]);

        $categories = [];
        if (count($getAll)) {
            foreach ($getAll as $single) {
                if (!isset($categories[$single->id])) {
                    $categories[$single->id] = new \StdClass();
                }
                $categories[$single->id]->cat = $single->cat;
                $categories[$single->id]->brands[] = $single->brand;
            }
        }
//View

@foreach($categories as $category)
 <li><a>{{ $category->cat}}</a>
   <ul class="sort-section">
     <li><a href="#"><strong>All {{$category->cat}}</strong></a></li>
     @foreach($category->brands as $brand)
        <li><a href="#">{{ $brand }}</a></li>
     @endforeach
   </ul>
 </li>
@endforeach

#9 Laravel 5.x » Как реализовать данный запрос » 03.02.2017 00:35:01

laravelNewbie
Ответов: 4

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

    //model
            $categories = DB::table('products')
                    ->join('categories', 'products.c_id', '=', 'categories.id')
                    ->select('categories.name as cat')
                    ->groupBy('categories.name')
                    ->get();
            $brands = DB::table('products')
                    ->join('categories', 'products.c_id', '=', 'categories.id')
                    ->join('brands', 'products.b_id', '=', 'brands.id')
                    ->select('brands.name as brand')
                    ->where('categories.id', '=', '1')<-- об этом речь пойдёт ниже
                    ->groupBy('brands.name')
                    ->get();
    
    //view
    
                    @foreach($categories as $category)
                    <li><a>{{ $category->cat }}</a>
                        <ul class="sort-section">
                            <li><a href="#"><strong>All CPUs</strong></a></li>
                            @foreach($brands as $brand)
                            <li><a href="#">{{ $brand->brand }}</a></li>
                            @endforeach
                        </ul>
                    </li>
                    @endforeach

Проблема заключается в выделенной мною строчкой в модели. Я "выбираю" записи, где `id` категории = 1(проверял или всё остальное работает), когда на самом деле мне нужно выбирать `id` поточной категории(поточной на въюхе). Другими словами, если бы я это делал по-простому и по-неправильному, то я бы второй запрос осуществлял бы внутри первого `foreach` на въюхе. Каким образом можно решить данный вопрос?

#10 Re: Laravel 5.x » Где нужно обращаться с запросом к БД? » 18.06.2016 12:23:34

Но, всё таки, следующий код в контроллере является правильным:

ScheduleRelation::insert(['s_id' => $id, 'u_id' => $user->id]);

Schedule::where('id', '=', $id)->decrement('slots');

?

#11 Re: Laravel 5.x » Где нужно обращаться с запросом к БД? » 16.06.2016 16:17:21

Ну вот так как раз таки в основном и работают с БД в контроллерах.
Например:

App\Flight::where('active', 1)
          ->where('destination', 'San Diego')
          ->update(['delayed' => 1]);

Я понимаю, что так удобнее, но мне интересно или разумно производить похожие запросы прямо в моделе? (я пишу диплом и боюсь что ларавельный подход к моделям могут на комиссии не понять)

#12 Re: Laravel 5.x » Где нужно обращаться с запросом к БД? » 16.06.2016 13:28:54

VitalN пишет:

}
Например?
Возможно где-то для упрощения просто приводят, когда упор на что-то другое


Ну вот за месяц работы с документацией я не нашёл примера, где обращаются с запросом к БД в моделе. И теперь я не могу толком понять как это сделать.
Сначала я так же все запросы писал в контроллерах, но теперь хотел бы разделить работу с БД от контроллеров.
И хотел бы получить совет на таком простом примере:
Раньше у меня был следующий код в контроллере:

DB::table('items')->insert(['name' => $name, 'size' => $size, 'color' => $color] );

Как мне теперь по людски реализовать то же самое, только отдельно в моделе, а в контроллере только вызвав метод с модели?

Неужели так:
контроллер

$item = new Item();
$item->newUser($name, $size, $color);

модель Item

public function newItem($name, $size, $color)
    {
        DB::table('items')->insert(['name' => $name, 'size' => $size, 'color' => $color] );
    }

#13 Laravel 5.x » Где нужно обращаться с запросом к БД? » 16.06.2016 13:18:27

laravelNewbie
Ответов: 7

В MVC  нужно всю работу с БД переносить в модели. Но во всех примерах в документации запросы делают в контроллерах.
Так где же на самом деле следует работать с БД?

#14 Re: Laravel 5.x » Время от времени выскакивает "Undefined variable" » 11.06.2016 14:15:00

Оу. Сейчас попробую. В остальных подобных случаях всё и так работало нормально. Просто я в примерах где -то когда-то так увидел и с тех пор везде так писал.

#15 Laravel 5.x » Время от времени выскакивает "Undefined variable" » 11.06.2016 14:00:22

laravelNewbie
Ответов: 2

Очень странная ситуация — время от времени ларавель ругается, на то, что используется не объявленная переменная. Переменные я передаю с контроллера на представление следующим образом:

return view('pages.schedule', ['items' => $items], ['user' => $user], ['relation' => $relation]);

Самое странное здесь то, что ларавель ругается только на последнюю передаваемую переменную. И достаточно просто поменять последнюю передаваемую переменную местами с какой либо другой и ошибка на какое-то время пропадает. А затем снова появляется. И приходится делать всё заново.
Что это вообще может быть и как это исправить? Поиск давал результаты только связанные со стандартной переменной $errors

#17 Re: Laravel 5.x » Есть ли способ задать стили для страничного вывода? » 10.06.2016 22:45:00

не ну писать самому пагинатор, когда меня не устраивает только символы внутри ссылки это туповато.

#18 Re: Laravel 5.x » Есть ли способ задать стили для страничного вывода? » 08.06.2016 22:19:44

hzone пишет:
laravelNewbie пишет:
hzone пишет:

исходники в директории vendor править не стоит, ибо composer update все ваши старания по*#*#т к чёрту

ну а какие тогда ещё варианты?

писать самому, не?

можно вообще на чистом php писать, чё уж с фреймворками заморачиваться.

#19 Re: Laravel 5.x » Есть ли способ задать стили для страничного вывода? » 08.06.2016 18:38:52

hzone пишет:

исходники в директории vendor править не стоит, ибо composer update все ваши старания по*#*#т к чёрту

ну а какие тогда ещё варианты?

#20 Re: Laravel 5.x » Есть ли способ задать стили для страничного вывода? » 08.06.2016 12:54:51

Это я конечно по жёсткому затупил. Но ещё вопрос: мне нужно убрать  каким-то образом эти стрелочки. Такое возможно?(просто когда видел заготовки стилей в интернете, то там всё равно везде эти стрелочки оставались)


PS: уже нашёл. в файлах пагинатора удалил эти символы и теперь всё как надо. Надеюсь это правильный подход.

#21 Laravel 5.x » Есть ли способ задать стили для страничного вывода? » 08.06.2016 12:30:02

laravelNewbie
Ответов: 10

Использую simplePaginate, но не могу найти пример изменения визуального оформления ссылок. Каким образом можно задать стили для ссылок?

#22 Re: Laravel 5.x » Форматирование DateTime » 07.06.2016 16:22:58

Я дурачёк. Сделал следующим образом:

@foreach($items as $item)
                <?php
                    $time = new DateTime($item->dtime);
                    $i = $time->format('H:i');
                ?>
                <div class="schedule-item">
                    <div class="s-time">{{ $i }}</div>
                </div>
@endforeach

Если это слишком тупо, то критика приветствуется.

#23 Laravel 5.x » Форматирование DateTime » 07.06.2016 16:07:30

laravelNewbie
Ответов: 3

В представлении через foreach вывожу DateTime  с БД. Но мне нужно выводить только часы и минуты. Не могу понять как и где это форматирование задать.
Контроллер:

$items = DB::table('schedule')
                        ->orderBy('dtime', 'asc')
                        ->get();

        return view('pages.schedule', ['items' => $items]);

Представление:

@foreach($items as $item)
    <div class="schedule-item">
        <div class="s-time">{{ $item->dtime }}</div>
    </div>
@endforeach

Я знаю, что можно задать желаемый формат следующим образом:

$time = new \DateTime($item->dtime);
$i = $time->format('H:i'));

Но не могу понять, как это реализовать по человечески.

#24 Re: Laravel 5.x » Регистрация пользователя администратором » 06.06.2016 11:11:39

Ну так я это уже всё давно реализовал. Просто было достаточно сказать, что такое по дефолту не предусмотрено и всё. А не рассказывать мне о том, что я не умею искать то, чего нет.

#25 Re: Laravel 5.x » Регистрация пользователя администратором » 05.06.2016 19:11:11

hzone пишет:

Рано вам фреймворками заниматься, если сами не понимаете КАК найти необходимые методы.

может ты имеешь в виду, что я не могу найти несуществующие во фреймворке методы?

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