Как заполнить вторую таблицу html, нажав кнопку на первой таблице, когда они оба находятся на одной странице в Laravel? - PullRequest
0 голосов
/ 17 января 2020

Я использую Laravel с mySql. У меня есть две таблицы в виде лезвия, одна в главном div, которая содержит кнопку, чтобы открыть вторую, находящуюся в стороне div, и заполнить ее данными, полученными из контроллера. Пожалуйста, найдите ниже мой код:

мои маршруты

// showing list of orders
Route::get('orders/show/all', 'OrderController@showOrders')->name('orders.show.all');
// showing order details
Route::get('orders/details/{id}', 'OrderController@showOrderDetails')->name('orders.details');

мой контроллер (OrderController), скопировал только две функции, которые имеют отношение к этому

public function showOrders(){
        $orders = Order::orderBy('total_amount', 'desc')
        ->where('user_id','=', Auth::user()->id)
        ->get();
        return view('orders.undo_sales', compact('orders'));
    }

    public function showOrderDetails($id){
        $ordered_item = Order::findOrFail($id);
        return redirect('orders/show/all', compact('ordered_item'));
    }
}

моему лезвию . php file

<main class="col-sm-8">

        @include('partials.messages')

        <div class="card">
            <div class="card-header">List of all sales</div>        

            <div class="card-body">

                    <table class="table ">
                        <thead>
                            <tr>
                                <th>Order #</th>
                                <th>Order Date</th>
                                <th>Total Amount</th>
                                <th>Actions</th>
                            </tr>
                        </thead>

                        <tbody>
                            @foreach ($orders as $order)
                                <tr>
                                    <td>{{ $order->id }}</td>
                                    <td>{{ $order->created_at }}</td>
                                    <td>{{ number_format($order->total_amount) }}</td>
                                    <td>
                                        <a href="{{ route('orders.details', $order->id) }}" class="btn btn-sm btn-secondary" onclick="showDiv()">Order details</a>
                                    </td>
                                </tr>
                            @endforeach
                        </tbody>
                    </table>   
            </div>
        </div>
    </main>

    <aside class="col-sm-4" id="aside">

        <div class="card">
            <div class="card-header">Order Details</div>  
            <div class="card-body">

                <table class="table ">
                    <thead>
                        <tr>
                            <th>Item Name</th>
                            <th>Quantity</th>
                        </tr>
                    </thead>

                    <tbody>
                        @foreach ($ordered_item->items as $value)
                            <tr>
                                <td>{{ $value->item_name }}</td>
                                <td>{{ number_format($value->pivot->quantity_on_order) }}</td>                                
                            </tr>
                        @endforeach
                    </tbody>
                </table>              

            </div>
        </div>
    </aside>
</div>

<script>
    let showDetails = document.querySelector('.show-details')
    let aside = document.querySelector('#aside')

    aside.style.display = 'none'

    function showDiv(){
        aside.style.display = 'block'
    }    
</script>

Нет проблем с заполнением основной (первой) таблицы данными из контроллера. Проблема заключается в получении объекта, возвращенного функцией showOrderDetails ($ id), в том же представлении, но в другой таблице, и отображении этих записей. Я попытался dd () данных в контроллере по этому методу, и я мог видеть item_name и соответствующее количество. Который доказал, что нет проблем с этим кодом в блейд-файле:

@foreach ($ordered_item->items as $value)
     <tr>
         <td>{{ $value->item_name }}</td>
         <td>{{ number_format($value->pivot->quantity_on_order) }}</td>                                
     </tr>
@endforeach

Но когда я отправил на просмотр, я получил ошибку в моем файле вида:

Неопределенная переменная : orders_item

Пожалуйста, помогите мне передать данные. Спасибо.

1 Ответ

1 голос
/ 17 января 2020

Что вы пытаетесь сделать, это перенаправить на ту же страницу с дополнительной переменной. Но это не может так работать.

Простой ответ будет следующим:

web. php

Route::get('orders/show/all', 'OrderController@showOrders')->name('orders.show.all');

Контроллер. php

public function showOrders(){

        $orders = Order::orderBy('total_amount', 'desc')
        ->where('user_id','=', Auth::user()->id)
        ->get();

         // I have added the same condition. I believe, you don't want the user to be able to see all user's orders
         $ordered_item = Order::where('user_id', '=', Auth::user()->id)
          ->find(request('order_id'));

        return view('orders.undo_sales', compact('orders', 'ordered_item'));
    }
}

клинок. php


....
 <a href="{{ route('orders.show.all', ['order_id' => $order->id]) }}" class="btn btn-sm btn-secondary">Order details</a>
....

@if($ordered_item)
    <aside class="col-sm-4" id="aside">
        @foreach ($ordered_item->items as $value)
            ....
        @endforeach
    </aside>
@endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...