создание отношения для просмотра, редактирования и удаления кнопок и отображение конкретного вида/страницы для соответствующей отправки в приложении laravel

Пожалуйста, кто-нибудь может помочь мне понять это, я пытался получить кнопки просмотра, редактирования и удаления в таблице отгрузок на странице моего веб-сайта, чтобы отображать представление для соответствующих кнопок отгрузки при нажатии. Но представление должно быть для каждой отгрузки, где ссылка размещается в строке таблицы, то есть каждый набор кнопок строки должен отображать представление для конкретных данных об отгрузке в строке таблицы.

Вот мой шаблон блейда для отображения таблицы всех пересадок:

<table id="shipment-list" class="table table-hover table-sm">
            <thead>
                <tr>
                    <th class="form-check">
                        <input class="form-check-input " id="wpcfe-select-all" type="checkbox">
                        <label class="form-check-label" for="materialChecked2"></label>
                    </th>
                    <th>Tracking Number</th>
                    <th class="no-space">Shipper Name</th>
                    <th class="no-space">Receiver Name  </th>
                    <th>Status</th>
                    <th>Shipment Type</th>                              
                    <th class="text-center">View</th>
                    <th class="text-center">Print</th>
                    <th class="text-center">Update</th>
                    <th class="text-center">Delete</th>
                </tr>
            </thead>
            <tbody>
                    @if(count($shipment) >0)
                    @foreach($shipment as $shipment)

                <tr id="shipment-2928" class="shipment-row pending">
                    <td class="form-check">
                        <input class="wpcfe-shipments form-check-input " type="checkbox" name="wpcfe-shipments[]" value="2928" data-number="MSD076941-CARGO">
                        <label class="form-check-label" for="materialChecked2"></label>
                    </td>
                    <td><a href="#" class="text-primary font-weight-bold" name="tracking_code">{{$shipment->tracking_code }}</a></td>
                    <td class="no-space">{{$shipment->sender_name }}</td>
                    <td class="no-space">{{$shipment->receiver_name }}</td>
                    <td class="shipment-status pending">{{$shipment->status }}</td>
                    <td class="shipment-type default">{{$shipment->shipment_type }}</td>                                    
                    <td class="text-center">
                        <a href="/single" title="View">
                            <i class="fa fa-list text-success"></i>
                        </a>
                            </td>
                    <td class="text-center print-shipment">
                <div class="dropdown">
                    <!--Trigger-->
                    <button class="btn btn-default btn-sm dropdown-toggle m-0 py-1 px-2 waves-effect waves-light" type="button" id="dropdownPrint" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"><i class="fa fa-print"></i></button>
                    <!--Menu-->
                    <div class="dropdown-menu dropdown-primary" x-placement="bottom-start" style="position: absolute; will-change: transform; top: 0px; left: 0px; transform: translate3d(0px, 38px, 0px);" x-out-of-boundaries="">
                        <a class="dropdown-item print-invoice py-1" data-id="2928" data-type="invoice" href="#">Invoice</a>
                        <a class="dropdown-item print-label py-1" data-id="2928" data-type="label" href="#">Label</a>
                        <a class="dropdown-item print-waybill py-1" data-id="2928" data-type="waybill" href="#">Waybill</a>
                    </div>
                </div>
                </td>
                <td class="text-center wpcfe-action">                                   
                    <a href="#" title="Update">
                        <i class="fa fa-edit text-info"></i>
                    </a>                                    
                </td>
                <td class="text-center">
                    <a href="#" class="wpcfe-delete-shipment" data-id="2928" title="Delete"><i class="fa fa-trash text-danger"></i></a>
                </td>   
                                                    
            </tr>
            @endforeach

            @else
                <tr>
                    <td colspan="6">
                        <strong>No Users Found !!!</strong>
                    </td>
                </tr>
            @endif
        </tbody>
        </table>
    </div>

Вот домашний контроллер, который отображает страницу/представление всех отправлений (индекс администратора):

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Shipment;
use DB;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        $page_title = "Admin Dashboard";
        $shipment = Shipment::latest()->get();
        return view('home', compact('shipment','page_title'));
        
      
    }
}

Вот что я пробовал в контроллере доставки для отображения одного представления с помощью кнопок на столе. Но я знаю, что это далеко не то, что я должен делать:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Shipment;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\MessageBag;




class ShipmentController extends Controller
{
   
    /**
     * Create a new user instance after a valid registration.
     *
     * @param  Request  $request
     * @return \App\Shipment
     */
    protected function store(Request $request)
    {
        
        $shipment = new Shipment();

        $data  = $this->validate($request, [
            'sender_name' => 'required|string|max:255',
            'sender_email' => 'required|string|email|max:255',
            'receiver_email' => 'required|string|email|max:255',
            'sender_address' => 'required|string',
            'estimated_Date' => 'required||date|after:today',
            'shipment_type' => 'required|string|max:255',
            'content' => 'required|string|max:255', 
            'receiver_name' => 'required|string|max:255', 
            'receiver_address' => 'required|string|max:255', 
            'sender_country' => 'required|string|max:255', 
            'sender_telephone' => 'required|string|max:255',
            'comments' => 'required|string|max:255',
            'receiver_telephone' => 'required|string|max:255',
            'receiver_country' => 'required|string|max:255',
            'package_weight' => 'required|string|max:255',
            
        ]);
        

        $shipment->sender_name = $request->input('sender_name');
        $shipment->receiver_email= $request->input('receiver_email');
        $shipment->sender_email= $request->input('sender_email');
        $shipment->sender_address= $request->input('sender_address');
        $shipment->estimated_Date= $request->input('estimated_Date');
        $shipment->shipment_type= $request->input('shipment_type');
        $shipment->content= $request->input('content');
        $shipment->receiver_name= $request->input('receiver_name');
        $shipment->receiver_address= $request->input('receiver_address');
        $shipment->sender_country= $request->input('sender_country');
        $shipment->sender_telephone= $request->input('sender_telephone');
        $shipment->comments= $request->input('comments');
        $shipment->receiver_telephone= $request->input('receiver_telephone');
        $shipment->receiver_country= $request->input('receiver_country');
        $shipment->package_weight= $request->input('package_weight');
        $shipment->tracking_code = strtoupper(Str::random(20));
        
        $shipment->save();   

           
            return redirect('/index')->with('Success', 'Your Shipment has been created');
       
    }

    public function tracking(Request $request){

        $this->validate($request,
            [
                'tracking_code' => 'required|max:25',

            ]);

        $shipment = Shipment::where('tracking_code', $request->input('tracking_code'))->first();
        
        if ( $shipment == null)
        {
            
            return redirect('/shipment/track')->with('error', 'Incorect Tracking Number');
            
        }
        else{
            return view('shipment.single')->with('shipment', $shipment);
        }

    }



    public function single(request $request ){

        $page_title = "view shipment";
        $tracking_code = Shipment::get()->tracking_code;
        $shipment= Shipment::where('tracking_code', $tracking_code)->first();
        
        return view('shipment.single', compact('tracking_code','shipment','page_title'));
       
    }
    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $request
     * @return \Illuminate\Http\Response
     */
    public function edit(Request $request)
    {
        $shipment = Shipment::where($shipment->tracking_code );

        //check for Admin user
        if (Gate::allows('isAdmin')) {

            return view('shipment.edit')->with('shipment', $shipment);
            
        }else {
            return redirect('/home')->with('error', 'Unauthorized Page');
        }
       
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        
    }

Вот мои маршруты:

Route::get('/single', 'ShipmentController@single')->name('single');

Route::get('/shipment/createnew', 'PagesController@createnew');

Route::Post('/shipment/storenew', 'ShipmentController@store')->name('storenew');

Route::get('/shipment/edit', 'ShipmentController@edit')->name('edit');



Route::Post('/tracking', 'ShipmentController@tracking')->name('tacking');

Auth::routes();

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

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


person Darrly Smith    schedule 25.08.2020    source источник


Ответы (1)


в вашем foreach loop, поскольку у вас есть один столбец для delete и edit, поэтому вы можете иметь что-то подобное. я делаю это только для edit

Просмотр блейд-сервера

<td class="text-center">
<a href="{{route('shipment.edit',$shipment->id)}}" class="wpcfe-edit-shipment" data-id="2928" title="Edit"><i class="fa fa-edit text-primary"></i></a>
</td>

web.php

Route::get('/shipment/edit/{shipment}', 'ShipmentController@edit')->name('shipment.edit');

контроллер

public function edit(Shipment $shipment){
return view('shipmentview',compact('shipment'));
}

вы можете выполнить то же самое для удаления, как показано ниже.

просмотр лезвия

<td class="text-center">
    <a href="{{route('shipment.delete',$shipment->id)}}" class="wpcfe-edit-shipment" data-id="2928" title="Delete"><i class="fa fa-trash text-danger"></i></a>
    </td>

web.php

Route::get('/shipment/{shipment}/delete', 'ShipmentController@delete')->name('shipment.delete');

контроллер

public function delete(Shipment $shipment){
$shipment->delete();
return back();
}
person Naveed Ali    schedule 25.08.2020
comment
спасибо миллион, это отлично сработало для кнопки редактирования, но не работает для представления .... я продолжаю получать эту ошибку count(): параметр должен быть массивом или объектом, который реализует Countable, я думаю, это происходит из цикла foreach, что может я об этом - person Darrly Smith; 25.08.2020
comment
ты тоже хочешь показать? вы можете сделать ту же процедуру, что и я для редактирования. - person Naveed Ali; 25.08.2020
comment
если это помогло вам, пожалуйста, примите ответ, чтобы он мог помочь другим в будущем. - person Naveed Ali; 25.08.2020
comment
не работает для представления, я попробовал его для представления, получил эту ошибку, как я уже говорил ранее, и для редактирования и удаления он повторно настраивает представление, если вы можете быть так любезны, чтобы помочь мне с логикой для функции удаления, я также ценить - person Darrly Smith; 25.08.2020
comment
Большое спасибо, я очень признателен за помощь, решил почти все мои проблемы ..... но представление продолжает возвращать ошибку, какие-либо предложения? - person Darrly Smith; 25.08.2020
comment
пожалуйста, проверьте свой код в контроллере и добавьте результат и посмотрите, что вы видите в нем. - person Naveed Ali; 25.08.2020
comment
у меня есть данные, и они, кажется, работают правильно и возвращают представление .... но проблема связана с файлом блейда ... я использовал @if (count ($ shipment) › 0) @ foreach ( $shipment as $shipment) при вызове shipping_info/details в представлении, и именно на это указывает ошибка, любые предложения о том, как я могу обойти это @naveed - person Darrly Smith; 25.08.2020