не может найти переданные данные с контроллером в Blade Laravel 5.6 - PullRequest
0 голосов
/ 25 сентября 2018

Я создал проект Laravel.Я использую laravel 5.6

Показать продукты и категории в балде с нижеуказанным кодом (Товары принимаются правильно.):

<div id="orderProductSelect" class="row">

       <h2>chouse product :</h2>

        @foreach($products as $product)
                <div class="col-md-4" style="margin: 10px;">
                    <div id="{{ $product->id }}" class="orderProduct" style="cursor: pointer;">
                        <img style="width: 100%;height: 225px;" src="/images/{{$product->filename}}">
                        <span style="display: block;">{{ $product->name }}</span>
                    </div>
                </div>
            @endforeach
        </div>


        <div class="categoryAjax" style="display: none;">
            <div class="row">

                <h3>chouse category :</h3>

                @foreach($categories as $category)
                    <div class="col-md-4" style="margin: 10px;">
                        <div id="{{ $category->id }}" class="orderProduct" style="cursor: pointer;">
                            <img style="width: 100%;height: 225px;" src="/images/{{$category->filename}}">
                            <span style="display: block;">{{ $category->name }}</span>
                        </div>
                    </div>
                @endforeach
            </div>
        </div>

и отправляю код продукта с помощью Ajax:

jQuery('.orderProduct').click(function(e){
    var productId = $(this).attr('id');
    var token = '{{ csrf_token() }}';

    e.preventDefault();

    jQuery.ajax({
        url: "{{ url('order/getCategoryAjax') }}",
        method: 'post',
        data: {
            id: productId,
            _token: token
        },
        success: function(data){
            $('#orderProductSelect').hide();
            $('.categoryAjax').show();
        }});
});

Я получаю идентификатор продукта в контроллере заказа.Теперь найдите категорию продукта:

public function getCategoryAjax(Request $request){

    $product = Product::findOrFail($request->id);

    $categories  = $product->category()->get();

    if ($request->ajax()) {
        return View::make('user.profile.order.create')->with(compact('categories'))->render();
    }

}

Модель моего продукта:

class Product extends Model{

protected $fillable = [ 'name', 'filename', 'description'];

public function category(){

    return $this->hasMany(Category::class,'product_id');
}}

Теперь у меня ошибка на странице create.blade.php:

Undefined variable: categories (View: /home/laravel-projects/resources/views/user/profile/order/create.blade.php)

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Вам необходимо возвращать ответ в этой функции, а не весь просмотр

public function getCategoryAjax(Request $request){

    $product = Product::findOrFail($request->id);

    $categories  = $product->category;

    return $categories;

}

Вы можете добавить категорию из ajax

jQuery('.orderProduct').click(function(e){
                var productId = $(this).attr('id');
                var token = '{{ csrf_token() }}';

                e.preventDefault();

                jQuery.ajax({
                    url: "{{ url('order/getCategoryAjax') }}",
                    method: 'post',
                    data: {
                        id: productId,
                        _token: token
                    },
                    success: function(data){
                        $('#orderProductSelect').hide();
                        $('.categoryAjax').show();
                        $.each(data, function(index,category){
                            $('.categoryAjax').append('<div class="col-md-4" style="margin: 10px;"> <div id="'+category.id+'" class="orderProduct" >'+category.name+'</div> </div>');
                        });
                    }});
            });

В файле представления

<div class="categoryAjax" style="display: none;">
            <div class="row">

                <h3>chouse category :</h3>

            </div>
        </div>
0 голосов
/ 25 сентября 2018

Сначала я советую переименовать ваши отношения с category на categories.Это один ко многим, верно?Тогда вы можете получить доступ к отношению только с помощью $categories = $product->categories без get().

Также вы можете попробовать dd($someVariable) проверить любые данные в ваших $ переменных.

0 голосов
/ 25 сентября 2018

В этой части вашего Blade у вас есть переменная $products, но вы не получаете ее от контроллера

@foreach($products as $product)
    <div class="col-md-4" style="margin: 10px;">
        <div id="{{ $product->id }}" class="orderProduct" style="cursor: pointer;">
            <img style="width: 100%;height: 225px;" src="/images/{{$product->filename}}">
            <span style="display: block;">{{ $product->name }}</span>
        </div>
    </div>
@endforeach
...