LARAVEL:foreach 中的所有元素都有 id 1,这使得删除它们变得不可能
P粉064448449
P粉064448449 2024-01-28 23:17:43
[PHP讨论组]

我的处境很困难。 我正在用刮刀构建一个出生列表克隆,但很难对其进行编码,因为我经验不足。我成功创建了一个包含多个表单的管理页面,用于插入网站、类别和链接表单,您可以在其中指定应在哪个链接上进行抓取以及将链接到哪个网站和类别。不过,添加这样的东西没问题,但是删除就不行了..

我的网站、类别和链接显示在我的管理页面上,每个元素都有一个抓取和删除按钮。当我删除行中的最后一项时,它会删除第一个元素。当我想删除其他内容时,laravel 会抛出一个异常,它尝试尝试读取 null 上的属性,这意味着它不再存在。当我在删除函数之前转储并死亡时,每个列表中的每个项目都有 id“1”。这就是为什么它删除一行中的第一项。有人可以帮我吗?

我认为这是因为请求删除该项目的 id 是从 url 中检索的,而 url 中给出的 id 是用户 id,即 1。所以如果有人可以给我提示以确保我可以以不同的方式给出用户的 ID。让我知道! 我的代码:

管理控制器:

 $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]);
        };

    }
}

我的管理页面:


    @include('partials.header')
   

Welkom {{ auth()->user()->name }}

Winkels

@csrf
@foreach ($websites as $web) @csrf @method('DELETE') @endforeach
{{ $web->title }} {{ $web->id }}

Categorieën

@csrf
@foreach ($categories as $category) @csrf @method('DELETE') @endforeach
{{ $category->title }} {{ $category->id }}

Scrapes

@csrf
@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 }}
@include('partials.footer')

我的路线:

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

全部回复(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();
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号