Laravel по-русски

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

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

#26 Laravel 5.x » сделать редирект в маршруте если не подошло условие where » 16.03.2017 16:55:26

respectpick
Ответов: 1
Route::get('generate/{id?}/{mini?}', [
    'uses' => 'CompgenController@generateImage',
    ])->where([
        'id' => '[0-9]+',
        'mini' => 'Y'
    ]);

как сделать, что бы where не выбрасывало Exception, а делало редирект на главную?

#28 Re: Laravel 5.x » Route [/] not defined. » 14.02.2017 17:07:28

когда пытаюсь так сделать

Route::get('/','IndexController@index')->name('/');

получаю

Call to undefined method Illuminate\Routing\Route::name()

У меня laravel 5.0.35 если что

#29 Re: Laravel 5.x » Route [/] not defined. » 14.02.2017 17:04:47

skiphog пишет:

А что вы пытаетесь сделать? Не url ли случайно передаете?

->route('route name');
Сюда передается имя маршрута. У вас назван хоть один маршрут так?
Посмотрите artisan route:list.  Есть там такой? Скорее всего нет...

Но если вы хотите такое имя, то надо добавить в определении роута ->name('/')

Например

Route::get('/','IndexController@index')->name('/');

а где вообще эти имена роутов указываются?

у меня такие маршруты

Route::get('/', 'WelcomeController@index');

Route::get('home', 'HomeController@index');

Route::get('generate', 'CompgenController@generateImage');

Route::get('replace', 'CompgenController@replaceImage');

Route::get('perehod', 'CompgenController@perehod');

Route::resource('fileUpload', 'CompgenController@fileUpload');

Route::get('userFiles', 'CompgenController@userFiles');

Route::get('feedback', 'CompgenController@feedback');

Route::post('addfeedback', 'CompgenController@addfeedback');

#30 Laravel 5.x » Route [/] not defined. » 14.02.2017 16:18:44

respectpick
Ответов: 6

нужно редиректнуть юзера по условию.

делаю

return redirect()->route('/');

ловлю ошибку - Route [/] not defined.

как фиксить это?

#32 Laravel 5.x » Почему в blade весь html уходит вверх » 27.01.2017 13:00:03

respectpick
Ответов: 3

Я создал header.blade.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <!--Let browser know website is optimized for mobile-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <!--Import Google Icon Font-->
    <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <!--Import materialize.css-->
    <link type="text/css" rel="stylesheet" href="app/styles.min.css"  media="screen,projection"/>
</head>
<header>
    <div class="container">
        <div class="row">
            <div class="col l12 center-align">
                <span class="title">Какой то текст</span>
            </div>
        </div>
        <div class="row">
            <a href="userFiles">Загрузить картинку</a>
        </div>
        <div class="row">
            @if (!Auth::check())
                <a href="home">Вход / Регистрация</a>
            @else
                <a href="#">Линый кабинет</a>
                <a href="/auth/logout">Выйти</a>
            @endif
        </div>
        <div class="row">
            <a href="feedback">Обратная связь</a>
        </div>
    </div>
</header>

и страница feedback.blade.php

там делаю подключение хидера

@extends('header')
<body>
<div class="row">
    <form>
            <textarea rows="10" cols="45" required placeholder="Ваш текст">

            </textarea>
    </form>
</div>
</body>

в итоге, весь html в этом файле оказывается над @exteds('header').

как так получается?

#33 Re: Laravel 5.x » Замена Exception обычным alert`ом » 09.12.2016 17:33:14

Androbim пишет:

Ну, я понял. Таки поиск? smile

Скажу так. Когда-то сам делал, примерно так, как Вы тут написали, но, кажется, использовал switch. Не элегантно, не спорю, хотя число параметров и вариантов было невелико, и система работала.  Может, есть и получше решения.

слишком сложно, у меня 6 параметров. Причем придется рассматривать варианты когда есть все 6 параметров, когда их нет, когда есть 3й и 5й, а остальных нет и тд.

#34 Re: Laravel 5.x » Замена Exception обычным alert`ом » 09.12.2016 17:26:11

если выполнится

->where('photo_sex_id', $array_properties['sex']

когда там 0, то mysql вернет пустой результат, а мне нужно что бы если там 0, то это where вообще не рассматривалось, даже не участвовало в запросе

#35 Re: Laravel 5.x » Замена Exception обычным alert`ом » 09.12.2016 16:12:20

Androbim пишет:

Не совсем понятно... Условие where, оно в любом случае отработает, зачем из него что-то исключать таким остроумным способом?... Уж если это делать, так в самом условии. Это во-первых.
Во-вторых, Ваш код написан таким образом, что 'sex', при любом значении, попадает в условие.
Посмотрите, if у Вас где заканчивается? То-то.

ну да, т.е. как бы нужно если есть $sex, то добавлять его во where, если нет, то не добавлять

просто не хочется писать что-то типа такого

if($array_properties['sex'] == 0){
                $new_symbol = DB::table('photo')
                    ->where('photo_symbol_id', $symbol_id)
                    ->whereNotIn('photo_id', array($photo_id))
                    ->orderByRaw('RAND()')
                    ->take(1)
                    ->get(['photo_id', 'photo_src', 'photo_symbol_id']);
}else{
                $new_symbol = DB::table('photo')
                    ->where('photo_symbol_id', $symbol_id)
                    ->where('photo_sex_id', $array_properties['sex']
                    ->whereNotIn('photo_id', array($photo_id))
                    ->orderByRaw('RAND()')
                    ->take(1)
                    ->get(['photo_id', 'photo_src', 'photo_symbol_id']);
}

а помимо указания sex есть еще куча других свойств, нужно при их наличии добавлять к where

#36 Re: Laravel 5.x » Замена Exception обычным alert`ом » 09.12.2016 15:35:14

а как сделать следующее, допустим у меня есть еще некоторые параметры, которые могут быть равны нулю или их ID в базе. Если они не равны нулю, то добавить их в условие where

            if($array_properties['sex'] == 0)
                $sex = '';
            else
                $sex = $array_properties['sex'];

            $photo_id = (int)$arr_img['photo_id'];
            try{
                $new_symbol = DB::table('photo')
                    ->where('photo_symbol_id', $symbol_id)
                    ->where('photo_sex_id', $sex)
                    ->whereNotIn('photo_id', array($photo_id))
                    ->orderByRaw('RAND()')
                    ->take(1)
                    ->get(['photo_id', 'photo_src', 'photo_symbol_id']);

так не срабатывает

#37 Laravel 5.x » Замена Exception обычным alert`ом » 08.12.2016 17:29:29

respectpick
Ответов: 12

идет запрос в базу через ajax

            $new_symbol = DB::table('photo')
                ->where('photo_symbol_id', $symbol_id)
                ->where('photo_sex_id', $array_properties['sex'])
                ->whereNotIn('photo_id', array($photo_id))
                ->orderByRaw('RAND()')
                ->take(1)
                ->get(['photo_id', 'photo_src', 'photo_symbol_id']);

и если он возвращает пустой результат, то ловлю исключение

ErrorException in CompgenReplace.php line 24:
Undefined offset: 0

как сделать так, что бы вместо исключения просто выдать alert("Символ не найден!")

#38 Re: Laravel 5.x » Как не избегать дублирования » 01.12.2016 11:11:37

covobo пишет:
respectpick пишет:
            $temp_images[$img->photo_symbol_id.$i] = "/temp_img/".$name_to_save;
            $temp_images[$img->photo_symbol_id.$i]['photo_id'] = $img->photo_id;
            $i++;
        }

с чем это может быть связано?

Не смущает, что $temp_images[$img->photo_symbol_id.$i] - это строка, а ты пытаешься обратиться к ней по индексу $temp_images[$img->photo_symbol_id.$i]['photo_id'] да ещё и присвоить туда что-то?
ты сделал примерно так
$string = "hello laravel.ru";
$string['super_index'] = 123;

Так нельзя.

точно. благодарю

#39 Re: Laravel 5.x » Как не избегать дублирования » 01.12.2016 10:22:34

у меня как-то так получилось

        foreach ($array_symbols_id as $id) {
            $array_images[] = $collection->where('photo_symbol_id', $id)->random();
        }

а теперь когда пытаюсь разложить массив

        $i = 0;
        foreach($images as $img){
            $name_to_save = str_replace("/img/", "", $img->photo_src);
            $path_to_img = $main_path.$img->photo_src;
            $path_to_save_img = $save_path.$name_to_save;

            $image = Image::make($path_to_img);
            $image->resize($width,$height);
            $image->save($path_to_save_img);

            $temp_images[$img->photo_symbol_id.$i] = "/temp_img/".$name_to_save;
            $temp_images[$img->photo_symbol_id.$i]['photo_id'] = $img->photo_id;
            $i++;
        }

ловлю ошибку в строке

$temp_images[$img->photo_symbol_id.$i]['photo_id'] = $img->photo_id;

Illegal string offset 'photo_id'

с чем это может быть связано?

#40 Re: Laravel 5.x » Как не избегать дублирования » 30.11.2016 18:44:33

AlexeyMezenin пишет:
respectpick пишет:

не будет возвращать всегда одну и ту же картинку?

Я этот код для примера дал. Суть в том, чтобы искать по коллекции запись по ID с помощью where()->first(). Подстрой его под свои данные.

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

$array_images[] = $collection->where('photo_symbol_id', $id)->first()->photo_src->photo_id->photo_symbol_id

что-нибудь типа такого?

#41 Re: Laravel 5.x » Как не избегать дублирования » 30.11.2016 18:22:42

а разве эта штука

$array[] = $array_images->where('photo_symbol_id', $array_symbols_id[$id])->first()->photo_src;

не будет возвращать всегда одну и ту же картинку?

#42 Re: Laravel 5.x » Как не избегать дублирования » 30.11.2016 18:08:24

на stackoverflow написали такое

In Laravel 5.0, DB returns an array and Model returns collections, so you can make it a collection by using collect():

$array_images = collect(DB::table('photo')
        ->whereIn('photo_symbol_id', $array_symbols_id)
        ->where('photo_moderation_id','2')
        ->orderByRaw('RAND()')
        ->get(['photo_id', 'photo_src', 'photo_symbol_id']));

теперь, когда распечатываю массив получаю

Collection {#290 ▼
  #items: array:3 [▶]
}

#43 Re: Laravel 5.x » Как не избегать дублирования » 30.11.2016 18:01:45

если вместо get использую select получаю такую вот шляпу

Builder {#290 ▼
  #connection: MySqlConnection {#284 ▶}
  #grammar: MySqlGrammar {#286 ▶}
  #processor: MySqlProcessor {#288}
  #bindings: array:5 [▶]
  +aggregate: null
  +columns: array:3 [▶]
  +distinct: false
  +from: "photo"
  +joins: null
  +wheres: array:2 [▶]
  +groups: null
  +havings: null
  +orders: array:1 [▶]
  +limit: null
  +offset: null
  +unions: null
  +unionLimit: null
  +unionOffset: null
  +unionOrders: null
  +lock: null
  #backups: []
  #operators: array:26 [▶]
  #useWritePdo: false
}

#44 Re: Laravel 5.x » Как не избегать дублирования » 30.11.2016 18:00:11

в доке написано

array|Builder[] get(array $columns = array('*'))

Execute the query as a "select" statement.

Parameters
array    $columns   

Return Value
array|Builder[]

#45 Re: Laravel 5.x » Как не избегать дублирования » 30.11.2016 17:31:01

AlexeyMezenin пишет:
respectpick пишет:

Call to a member function where() on array

Только что протестировал, этот код должен вернуть коллекцию:

DB::table('photo')
                ->where('photo_symbol_id', $array_symbols_id)
                ->where('photo_moderation_id','2')
                ->orderByRaw('RAND()')
                ->get(['photo_id', 'photo_src', 'photo_symbol_id'])

После этого where() без проблем ищет по коллекции, но у тебя почему-то там массив получился.

Ты после этого кода что-то делаешь с результатом? Например, ->toArray() или что-то подобное?

И что у тебя показывает вот это:

dd(DB::table('photo')
                ->where('photo_symbol_id', $array_symbols_id)
                ->where('photo_moderation_id','2')
                ->orderByRaw('RAND()')
                ->get(['photo_id', 'photo_src', 'photo_symbol_id']));

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

array:3 [▼
  0 => {#295 ▶}
  1 => {#294 ▶}
  2 => {#292 ▶}
]

#46 Re: Laravel 5.x » Как не избегать дублирования » 21.11.2016 11:28:32

вот тут exception ловлю

$array[] = $array_images->where('photo_symbol_id', $array_symbols_id[$id])->first()->photo_src;

Call to a member function where() on array

#47 Re: Laravel 5.x » Как не избегать дублирования » 21.11.2016 11:19:28

да, я понимаю, но сам запрос, который приходит в array_images

$array_images = DB::table('photo')
                ->where('photo_symbol_id', $array_symbols_id)
                ->where('photo_moderation_id','2')
                ->orderByRaw('RAND()')
                ->get(['photo_id', 'photo_src', 'photo_symbol_id'])

$array = [];

foreach ($array_symbols_id as $id) {
    $array[] = $array_images->where('photo_symbol_id', $array_symbols_id[$id])->first()->photo_src;
}

уже отсекает 3 символа. Т.е. если я введу 6 разных символов, то тогда все нормально, я и получу 6 разных картинок. А если я ввожу повторяющиеся символы, например "фывфыв" то этот запрос мне возвратит только картинки, связанные с символами "ф","ы","в". В этом, собственно и суть темы ))

#48 Re: Laravel 5.x » Как не избегать дублирования » 21.11.2016 11:03:51

у меня после DB::table уже 3 картинки отдаются вместо введенных шести

#49 Re: Laravel 5.x » Как не избегать дублирования » 21.11.2016 10:54:02

AlexeyMezenin пишет:
respectpick пишет:

разве это коллекция?

Да. Если после запроса вставить это, можно посмотреть коллекция это или что-то другое:

dd($array_images);

если я все правильно понял вы предлагаете сделать так

        foreach($array_symbols_id as $symbol){
            $array_images[] = DB::table('photo')
                ->where('photo_symbol_id', $symbol)
                ->where('photo_moderation_id','2')
                ->orderByRaw('RAND()')
                ->get(['photo_id', 'photo_src', 'photo_symbol_id']);
        }

?

#50 Re: Laravel 5.x » Как не избегать дублирования » 21.11.2016 10:44:21

        $array_images  = DB::table('photo')
            ->whereIn('photo_symbol_id', $array_symbols_id)
            ->where('photo_moderation_id','2')
            ->orderByRaw('RAND()')
            ->get(['photo_id', 'photo_src', 'photo_symbol_id']);

разве это коллекция?

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