LARAVEL: Alle Elemente in foreach haben die ID 1, was das Löschen unmöglich macht
P粉064448449
P粉064448449 2024-01-28 23:17:43
0
1
538

Meine Situation ist sehr schwierig. Ich erstelle mit Scraper einen Geburtslistenklon, aber es fällt mir schwer, ihn zu programmieren, weil ich unerfahren bin. Ich habe erfolgreich eine Admin-Seite mit mehreren Formularen zum Einfügen von Websites, Kategorien und Linkformularen erstellt, auf der Sie angeben können, auf welchem ​​Link gecrawlt werden soll und mit welcher Website und Kategorie er verknüpft werden soll. Allerdings ist das Hinzufügen von so etwas in Ordnung, das Löschen jedoch nicht..

Meine Websites, Kategorien und Links werden auf meiner Admin-Seite angezeigt, mit einer Schaltfläche zum Abrufen und Löschen für jedes Element. Wenn ich das letzte Element in der Zeile lösche, wird auch das erste Element gelöscht. Wenn ich etwas anderes löschen möchte, löst Laravel eine Ausnahme aus und versucht, die Eigenschaft auf Null zu lesen, was bedeutet, dass sie nicht mehr existiert. Wenn ich vor dem Entfernen der Funktion einen Dump mache und sterbe, hat jedes Element in jeder Liste die ID „1“. Aus diesem Grund wird das erste Element in einer Zeile gelöscht. Kann mir jemand helfen?

Ich denke, das liegt daran, dass die ID, die das Löschen des Elements anfordert, von der URL abgerufen wird und die in der URL angegebene ID die Benutzer-ID ist, die 1 ist. Wenn mir also jemand einen Tipp geben kann, um sicherzustellen, dass ich die Benutzer-ID auf andere Weise angeben kann. lass es mich wissen! Mein Code:

Management-Controller:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Website;
use App\Models\Category;
use App\Models\Link;
use Goutte\Client;


class AdminController extends Controller
{
    public function showAdmin($id)
    {

        $categories = Category::all();
        $websites = Website::all();
        $links = Link::all();
        return view('admin', compact('categories', 'websites', 'links'));
    }

    public function storeWeb(Request $request)
    {
            $web = Website::create([
                'title' => $request->input('site'),
                'url' => $request->input('url')
            ]);
        return back();
    }

    public function destroyWeb(Request $request, $id)
    {
        $web = Website::find($id);
        $web->delete();
        return back();
    }

    public function storeCat(Request $request)
    {
        $cat = Category::create([
            'title' => $request->input('title')
        ]);
        return back();
    }

    public function destroyCat(Request $request, $id)
    {
        $cat = Category::find($id)->first();
        $cat->delete();
        return back();
    }

    public function storeLink(Request $request) 
    {
        $link = Link::create([
            'url' => $request->input('scrapeUrl'),
            'main_filter_selector' => $request->input('filter'),
            'website_id' => $request->input('website_id'),
            'category_id' => $request->input('category_id'),
        ]);
        return back();
    }

    public function destroyLink(Request $request, $id)
    {
        $link = Link::find($id);
        dd($link);
        $link->delete();
        return back();
    }


    public function scrape(Request $request)
    {
        $link = Link::find($request->link_id);

        $scraper = new Scraper (new Client());

        $scraper->handle($link);

        if($scraper->status == 1) {
            return response()->json(['status' => 1, 'msg' => 'Scraping done']);
        } else {
            return response()->json(['status' => 2, 'msg' => $scraper->status]);
        };

    }
}

Meine Verwaltungsseite:

<body class="relative min-h-screen">
    @include('partials.header')
   <main class="pb-20">
       <div class="text-center m-auto text-2xl p-4 w-fit border-b">
           <h2>Welkom <strong>{{ auth()->user()->name }}</strong></h2>
       </div>
       <div class="gap-10 m-auto xl:w-3/5">
            <div class="mt-8">
                <h3 class="bg-gray-100 p-4"><strong>Winkels</strong></h3>
                <div class="">
                    <div class="p-4 m-auto">
                        <form action="{{ route('newWeb', Auth()->user()) }}" method="POST">
                            @csrf
                            <div class="flex wrap flex-row items-center justify-left my-4">
                                <label for="shop" class="w-2/12">Webshop:</label>
                                <input type="text" required class="w-7/12 h-fit p-2 focus:outline-sky-500 rounded bg-slate-100" name="site" id="titel" placeholder="Dreambaby">
                            </div>
                            <div class="flex wrap flex-row items-center justify-left">
                                <label for="url" class="w-2/12">
                                   Voeg een url toe:
                                </label>
                                <input type="url" required class="w-7/12 h-fit p-2 focus:outline-sky-500 rounded bg-slate-100" name="url" id="url" placeholder="http://dreambaby.com/">
                                <button class="w-fit bg-green-400 h-fit p-2 rounded hover:bg-green-600 hover:text-white mx-2" name="shop" value="add" type="submit">Voeg link toe</button>
                            </div>
                        </form>
                            <div class="flex wrap flex-row items-center mt-12">
                                <div class="flex flex-row flex-wrap w-full">
                                    <table class="table-auto">
                                        @foreach ($websites as $web)
                                        <form action="{{ route('delWeb', Auth()->user()) }}" method="POST">
                                            @csrf
                                            @method('DELETE')
                                            <tr class="border-b">
                                                <td class="p-4">{{ $web->title }}</td>
                                                <td class="p-4">{{ $web->id }}</td>
                                                <td class="p-4"><button class="w-fit h-full p-2 bg-red-400 h-fit rounded hover:bg-red-600 hover:text-white block m-auto" type="submit">Verwijderen</button>
                                                </td>
                                            </tr>
                                        </form>
                                        @endforeach
                                    </table>
                                </div>
                            </div>
                    </div>
                </div>   
            </div>
        </div>           
        <div class="gap-10 m-auto xl:w-3/5">
            <div class="mt-8">
                <h3 class="bg-gray-100 p-4"><strong>Categorieën</strong></h3>
                <div class="mt-4">
                    <div class="p-4 m-auto">
                        <form action="{{ route('newCat', Auth()->user()) }}" method="POST">
                            @csrf
                            <div class="flex wrap flex-row items-center justify-left">
                                <label for="url" class="w-2/12">
                                   Voeg een categorie toe:
                                </label>
                                <input type="text" required class="w-7/12 h-fit p-2 focus:outline-sky-500 rounded bg-slate-100" name="title" id="cat" placeholder="Eten en Drinken">
                                <button class="w-fit bg-green-400 h-fit p-2 rounded hover:bg-green-600 hover:text-white mx-2" name="category_submit" type="submit">toevoegen</button>
                            </div>
                        </form>
                            <div class="flex wrap flex-row items-center mt-12">
                                <div class="flex flex-row flex-wrap w-full">
                                    <table class="table-auto">
                                        @foreach ($categories as $category)
                                        <form action="{{ route('delCat', Auth()->user()), $category->id }}" id="{{ $category->id }}" method="POST">
                                            @csrf
                                            @method('DELETE')
                                            <tr class="border-b">
                                                <td class="p-4">{{ $category->title }}</td>
                                                <td class="p-4">{{ $category->id }}</td>
                                                <td class="p-4"><button class="w-fit h-full p-2 bg-red-400 h-fit rounded hover:bg-red-600 hover:text-white block m-auto" type="submit">Verwijderen</button>
                                                </td>
                                            </tr>
                                        </form>
                                        @endforeach
                                    </table>
                                </div>
                            </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="gap-10 m-auto xl:w-3/5">
            <div class="mt-8">
                <h3 class="bg-gray-100 p-4"><strong>Scrapes</strong></h3>
                <div class="">
                    <div class="p-4 m-auto">
                        <form action="{{ route('newLink', Auth()->user()) }}" method="POST">
                            @csrf
                            <div class="flex wrap flex-row items-center justify-left my-4">
                                <label for="scrape" class="w-2/12">Url:</label>
                                <input type="text" required class="w-7/12 h-fit p-2 focus:outline-sky-500 rounded bg-slate-100" name="scrapeUrl" id="scrapetitel" placeholder="https://www.thebabyscorner.be/nl-be/baby_eten_en_drinken/">
                            </div>
                            <div class="flex wrap flex-row items-center justify-left my-4">
                                <label for="text" class="w-2/12">
                                   Filter:
                                </label>
                                <input type="text" required class="w-7/12 h-fit p-2 focus:outline-sky-500 rounded bg-slate-100" name="filter" id="url" placeholder=".1-products-item">
                            </div>
                            <div class="flex wrap flex-row items-center justify-left my-4">
                                <label for="webpicker" class="w-2/12">Winkel:</label>
                                <select name="website_id" id="" class="w-7/12 h-fit p-2 focus:outline-sky-500 rounded bg-slate-100">
                                    <option value="#" disabled selected>Kies je winkel</option>
                                    @foreach ($websites as $web)
                                        <option value="{{ $web->id }}" >{{ $web->title }}</option>
                                    @endforeach
                                </select>
                            </div>
                            <div class="flex wrap flex-row items-center justify-left my-4">
                                <label for="webpicker" class="w-2/12">Categorie:</label>
                                <select name="category_id" id="" class="w-7/12 h-fit p-2 focus:outline-sky-500 rounded bg-slate-100">
                                    <option value="#" disabled selected>Kies je categorie</option>
                                    @foreach ($categories as $cat)
                                        <option value="{{ $cat->id }}" >{{ $cat->title }}</option>
                                    @endforeach
                                </select>
                                <button class="w-fit bg-green-400 h-fit p-2 rounded hover:bg-green-600 hover:text-white mx-2" type="submit" name="scrape_submit">toevoegen</button>
                            </div>
                        </form>
                        <div class="flex wrap flex-row items-center mt-12 w-full">
                            <div class="flex flex-row flex-wrap w-full">
                                <form action="{{ route('delLink', Auth()->user()) }}" method="POST">
                                    @csrf
                                    @method('DELETE')
                                    <table class="table-auto w-full">
                                        <tr class="bg-slate-300">
                                            <td class="p-4"><strong>Url</strong></td>
                                            <td class="p-4"><strong>Filter selector</strong></td>
                                            <td class="p-4"><strong>Website</strong></td>
                                            <td class="p-4"><strong>Categorie</strong></td>
                                            <td></td>
                                            <td></td>

                                        </tr>
                                        @foreach ($links as $link)
                                            <tr data-id="{{ $link->id }}" class="">
                                                <td class="p-4 border-r">{{ $link->url }}</td>
                                                <td class="p-4 border-r">{{ $link->main_filter_selector }}</td>
                                                <td class="p-4 border-r">{{ $link->website->title }}</td>
                                                <td class="p-4 border-r">{{ $link->category->title }}</td>
                                                <td class="p-4 border-r"><button class="w-fit bg-green-400 h-fit p-2 rounded hover:bg-green-600 hover:text-white block m-auto" type="submit">Scrape</button></td>
                                                <td class="p-4"><button class="w-fit h-full p-2 bg-red-400 h-fit rounded hover:bg-red-600 hover:text-white block m-auto" type="submit">Verwijderen</button>
                                                </td>
                                            </tr>
                                        @endforeach
                                    </table>
                                </form>
                            </div>
                        </div>
                </div>
            </div>
        </div>
   </main>
   @include('partials.footer')
</body>

Meine Route:

<?php

use Illuminate\Support\Facades\Route;

use App\Http\Controllers\HomeController;
use App\Http\Controllers\DashController;
use App\Http\Controllers\ListviewController;
use App\Http\Controllers\NewlistController;
use App\Http\Controllers\BabyController;
use App\Http\Controllers\ScrapeController;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\ItemsController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

require __DIR__.'/auth.php';

Route::get('/', [HomeController::class, 'home'])->name('home');
Route::get('/home', [HomeController::class, 'home']);

Route::get('/listview', [ListviewController::class, 'listview'])
    ->name('lists');





Route::middleware('auth')->group (function () 

{   

    Route::get('/create', [NewlistController::class, 'newlist'])
        ->name('create');

    Route::get('/dashboard/{role}/{id?}', [DashController::class, 'dashboard'])
        ->name('dashboard');

    Route::post('/dashboard/{role}/{id}', [NewlistController::class, 'store']);

    Route::get('/dashboard/{user_id}/{baby}', [BabyController::class, 'show'])
        ->name('baby');

    Route::get('/dashboard/{user_id?}/{baby}/catalogus', [ScrapeController::class, 'show']);


    Route::get('/admin/{id}', [AdminController::class, 'showAdmin'])
        ->name('admin');

    Route::post('/admin/{id}/websites/', [AdminController::class, 'storeWeb'])
        ->name('newWeb');

    Route::delete('/admin/{id}/websites/', [AdminController::class, 'destroyWeb'])
        ->name('delWeb');
 
    Route::post('/admin/{id}/categories/', [AdminController::class, 'storeCat'])
        ->name('newCat');

    Route::delete('/admin/{id}/categories/', [AdminController::class, 'destroyCat'])
        ->name('delCat');

    Route::post('/admin/{id}/links/', [AdminController::class, 'storeLink'])
        ->name('newLink');

    Route::delete('/admin/{id}/links/', [AdminController::class, 'destroyLink'])
        ->name('delLink');

});

P粉064448449
P粉064448449

Antworte allen(1)
P粉403549616

替换此代码


@csrf @method('DELETE') @foreach ($links as $link) @endforeach
Url Filter selector Website Categorie
{{ $link->url }} {{ $link->main_filter_selector }} {{ $link->website->title }} {{ $link->category->title }}

有了这个



    @foreach ($links as $link)
    
    @endforeach
Url Filter selector Website Categorie
{{ $link->url }} {{ $link->main_filter_selector }} {{ $link->website->title }} {{ $link->category->title }}
@csrf @method('DELETE')

你的 destroyLink() 方法应该包含这个

public function destroyLink(Request $request)
{  
    $id = $request->id;
    $link = Link::find($id);
    $link->delete();
    return back();
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage