Laravel: сообщение об ошибке преобразования массива в строку - PullRequest
0 голосов
/ 18 апреля 2020

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

Вот использование этой программы

1. Выберите значение пользователя, затем нажмите кнопку [search] (Это search.blade. php)

2. Результат поиска будет отображаться в файле result.blade. php

my Laravel Framework равен 6.18.8

search.blade. php

    <form action="{{ route('search') }}" class="form-image-upload" method="POST" enctype="multipart/form-data">
 {!! csrf_field() !!}

    <div class="col-md-5">    
                <strong>TYPE</strong>    
                <select name="type" class="form-control">
                <option value="-" selected>-</option>
                <option value="j">j</option>
                <option value="w">w</option>
                </select>         
            </div>

            <div class="col-md-5">
                <strong>wc</strong>
                <select name="wc" class="form-control">
                <option value="N0" selected>0</option>
                <option value="N1">1</option>
                <option value="N2">2</option>
                <option value="N3">3</option>    
                </select> 
            </div>
             <div class="col-md-5">
                <strong>FC</strong>
                <select name="fc" class="form-control">
                <option value="0" selected>0</option>                   
                <option value="f01">f01</option>
                <option value="f02">f02</option>
                <option value="f03">f03</option>    
                </select>      
            </div>
            <div class="col-md-5">
                <strong>YC</strong>
                <select name="yc" class="form-control">
                <option value="0" selected>0</option>                   
                <option value="yc1">yc1</option>
                <option value="yc2">yc2</option>    
                </select>     
            </div>
            <div class="col-md-5">
                <strong>SC</strong>
                <select name="sc" class="form-control">
                <option value="Z01" selected>Z01</option>                   
                <option value="Z02" selected>Z02</option>
                <option value="Z03" selected>Z03</option>
                </select>      
            </div>
      <div class="col-md-2">

            <br/>
            <button type="submit" class="btn btn-success">Search</button>    
        </div>    
    </div>   
</form> 

result.blade. php

 {!! csrf_field() !!}
<div class='list-group gallery'>
        @if($images->count())
            @foreach($images as $image)
            <div class='col-sm-4 col-xs-6 col-md-3 col-lg-3'>
            <a class="thumbnail fancybox" rel="ligthbox" href="/images/{{ $image->image }}">
                <img class="img-responsive" alt="" src="/images/{{ $image->image }}" />
                <div class='text-center'>
                    <small class='text-muted'></small>
                </div> <!-- text-center / end -->
            </a> 
        </div> <!-- col-6 / end -->
        @endforeach
    @endif
</div> <!-- list-group / end -->

ImageGalleryController. php

public function search()

{
    $images = ImageGallery::get();
    return view('search',compact('images'));
}

public function order(Request $request)
{

    $data = $request->all();
    $images = ImageGallery::where(['type',$request->$data['type']],
        ['wc',$request->$data['type']],
        ['fc',$request->$data['fc']],
        ['yc',$request->$data['yc']],
        ['sc',$request->$data['sc']])->get();

    return view('result',compact('images'));
}  

Веб. php

// search section
Route::post('search', 'ImageGalleryController@order');
Route::get ('search', 'ImageGalleryController@search');

ОБНОВЛЕНИЕ

Curent мой контроллер

public function search()

    {
        $images = ImageGallery::get();
        return view('search',compact('images'));
    }

    public function order(Request $request) {

        $data = $request->all();

        $images = ImageGallery::where([
            ['type', $data['type']],
            ['wc',$data['type']],
            ['fc',$data['fc']],
            ['yc',$data['yc']],
            ['sc',$data['sc']]
        ])->get();

         dd($images); 
        return view('search', compact('images'));

        }

Ответы [ 3 ]

1 голос
/ 21 апреля 2020

Проверьте этот код:

search.blade. php

<form action="{{ route('search') }}" class="form-image-upload" method="POST" enctype="multipart/form-data">
    {!! csrf_field() !!}

    <div class="col-md-5">    
        <strong>TYPE</strong>    
        <select name="type" class="form-control">
            <option value="" selected>Please Select</option>
            <option value="j">j</option>
            <option value="w">w</option>
        </select>         
    </div>

    <div class="col-md-5">
        <strong>wc</strong>
        <select name="wc" class="form-control">
            <option value="" selected>Please Select</option> 
            <option value="N0">0</option>
            <option value="N1">1</option>
            <option value="N2">2</option>
            <option value="N3">3</option>    
        </select> 
    </div>
    <div class="col-md-5">
        <strong>FC</strong>
        <select name="fc" class="form-control">
            <option value="" selected>Please Select</option>                   
            <option value="f01">f01</option>
            <option value="f02">f02</option>
            <option value="f03">f03</option>    
        </select>      
    </div>
    <div class="col-md-5">
        <strong>YC</strong>
        <select name="yc" class="form-control">
            <option value="" selected>Please Select</option>                   
            <option value="yc1">yc1</option>
            <option value="yc2">yc2</option>    
        </select>     
    </div>
    <div class="col-md-5">
        <strong>SC</strong>
        <select name="sc" class="form-control">
            <option value="" selected>Please Select</option>
            <option value="Z01">Z01</option>                   
            <option value="Z02">Z02</option>
            <option value="Z03">Z03</option>
        </select>      
    </div>
    <div class="col-md-2">

        <br/>
        <button type="submit" class="btn btn-success">Search</button>    
    </div>   
</form>

result.blade. php

<div class='list-group gallery'>
    @if($images->count())
        @foreach($images as $image)
        <div class='col-sm-4 col-xs-6 col-md-3 col-lg-3'>
            <a class="thumbnail fancybox" rel="ligthbox" href="/images/{{ $image->image }}">
                <img class="img-responsive" alt="" src="/images/{{ $image->image }}" />
                <div class='text-center'>
                    <small class='text-muted'></small>
                </div> <!-- text-center / end -->
            </a> 
        </div> <!-- col-6 / end -->
        @endforeach
    @endif
</div> <!-- list-group / end -->

ImageGalleryController. php

public function search()
    {
        $images = \App\ImageGallery::get();

        return view('search', compact('images'));
    }

    public function order(Request $request)
    {

        $data = $request->all();

        $images = \App\ImageGallery::when($data['type'], function ($query, $type) {
            return $query->where('type', $type);
        })->
        when($data['fc'], function ($query, $fc) {
            return $query->orWhere('fc', $fc);
        })->
        when($data['yc'], function ($query, $yc) {
            return $query->orWhere('yc', $yc);
        })->
        when($data['wc'], function ($query, $wc) {
            return $query->orWhere('wc', $wc);
        })->
        when($data['sc'], function ($query, $sc) {
            return $query->orWhere('sc', $sc);
        })
        ->get();

        return view('result', compact('images'));
    }

Это структура базы данных:

enter image description here

Это полный рабочий код в моей локальной системе.

Это веб. php файл

Route::get ('search', 'ImageGalleryController@search');
Route::post('search', 'ImageGalleryController@order')->name('search');
1 голос
/ 18 апреля 2020
  1. Добавьте токен csrf в форму.
@csrf

Изменить функцию заказа как:

publi c Функция заказа (Запрос $ запрос) {

$data = $request->all();

$images = ImageGallery::where([
    ['type', $data['type']],
    ['wc',$data['type']],
    ['fc',$data['fc']],
    ['yc',$data['yc']],
    ['sc',$data['sc']]
])->get();
return view('result', compact('images'));

}

Укажите метод имени для маршрута:

Route :: post ('search', 'ImageGalleryController@order') -> name ('search');

0 голосов
/ 18 апреля 2020

Вы должны что-то изменить. Потому что ваш $data является массивом. Но вы должны объявить как объект. По этой причине вы получаете эту ошибку.

$data = $request->all();

$images = ImageGallery::where(['type'=>$data['type']],
    ['wc'=>$data['type']],
    ['fc'=>$data['fc']],
    ['yc'=>$data['yc']],
    ['sc'=>$data['sc']])->get();
...