Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Route::get('generate/{id?}/{mini?}', [
'uses' => 'CompgenController@generateImage',
])->where([
'id' => '[0-9]+',
'mini' => 'Y'
]);
как сделать, что бы where не выбрасывало Exception, а делало редирект на главную?
спасибо, благодарю
когда пытаюсь так сделать
Route::get('/','IndexController@index')->name('/');
получаю
Call to undefined method Illuminate\Routing\Route::name()
У меня laravel 5.0.35 если что
А что вы пытаетесь сделать? Не 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');
нужно редиректнуть юзера по условию.
делаю
return redirect()->route('/');
ловлю ошибку - Route [/] not defined.
как фиксить это?
</html> в футере
Я создал 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').
как так получается?
Ну, я понял. Таки поиск?
Скажу так. Когда-то сам делал, примерно так, как Вы тут написали, но, кажется, использовал switch. Не элегантно, не спорю, хотя число параметров и вариантов было невелико, и система работала. Может, есть и получше решения.
слишком сложно, у меня 6 параметров. Причем придется рассматривать варианты когда есть все 6 параметров, когда их нет, когда есть 3й и 5й, а остальных нет и тд.
если выполнится
->where('photo_sex_id', $array_properties['sex']
когда там 0, то mysql вернет пустой результат, а мне нужно что бы если там 0, то это where вообще не рассматривалось, даже не участвовало в запросе
Не совсем понятно... Условие 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
а как сделать следующее, допустим у меня есть еще некоторые параметры, которые могут быть равны нулю или их 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']);
так не срабатывает
идет запрос в базу через 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("Символ не найден!")
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;Так нельзя.
точно. благодарю
у меня как-то так получилось
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'
с чем это может быть связано?
respectpick пишет:не будет возвращать всегда одну и ту же картинку?
Я этот код для примера дал. Суть в том, чтобы искать по коллекции запись по ID с помощью where()->first(). Подстрой его под свои данные.
а как можно одной строкой получить не только photo_src, а чтоб массив был из трех данных?
$array_images[] = $collection->where('photo_symbol_id', $id)->first()->photo_src->photo_id->photo_symbol_id
что-нибудь типа такого?
а разве эта штука
$array[] = $array_images->where('photo_symbol_id', $array_symbols_id[$id])->first()->photo_src;
не будет возвращать всегда одну и ту же картинку?
на 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 [▶]
}
если вместо 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
}
в доке написано
array|Builder[] get(array $columns = array('*'))
Execute the query as a "select" statement.
Parameters
array $columns
Return Value
array|Builder[]
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 ▶}
]
вот тут exception ловлю
$array[] = $array_images->where('photo_symbol_id', $array_symbols_id[$id])->first()->photo_src;
Call to a member function where() on array
да, я понимаю, но сам запрос, который приходит в 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 разных картинок. А если я ввожу повторяющиеся символы, например "фывфыв" то этот запрос мне возвратит только картинки, связанные с символами "ф","ы","в". В этом, собственно и суть темы ))
у меня после DB::table уже 3 картинки отдаются вместо введенных шести
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']);
}
?
$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']);
разве это коллекция?