显示功能不起作用。无法按 id 检索元素。拉拉维尔 5.8

Posted

技术标签:

【中文标题】显示功能不起作用。无法按 id 检索元素。拉拉维尔 5.8【英文标题】:Show function not working. Can't retrieve element by id. Laravel 5.8 【发布时间】:2022-01-05 03:30:08 【问题描述】:

我创建了资源控制器,在我的 laravel 5.8 项目中每个模型一个。我希望 show 函数根据插入在 URL 上的 id 返回我想要的 DB 元素,就像它应该做的那样。现在我直接在我的控制器上进行测试,我没有使用我模型的“thisCircuit”功能。调用索引,返回一个包含所有电路的 json。调用该节目不会返回任何内容。我该如何解决?

显示功能

    public function show(circuits $circuits)
    
        $circuits = circuits::findOrFail($circuits);
        dd($circuits);
    

型号

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;


class circuits extends Model

    protected $fillable = [
        'circuitId', 'circuitRef', 'name',
        'location', 'country', 'lat',
        'lng', 'alt', 'url',
    ];

    protected $primaryKey = 'circuitId';

    

    public function races()
    
        return $this->hasMany('App\races', 'circuitId');
    

    public function allCircuits()
        $data = Circuits::all();
        return response()->json($data);
    

    public function thisCircuit($id)
        $id = circuits::findOrFail($id);
    

Web.php 文件

Route::get('/test', 'CircuitsController@index');
Route::get('/test/circuit', 'CircuitsController@show');

浏览器上的网址

http://localhost:8000/test/1

浏览器上的结果

Illuminate\Database\Eloquent\Collection #947 ▼
  #items: []

【问题讨论】:

您已经从方法参数中获得了$circuits。 (可能还想将您的模型重命名为单数 Circuit @brombeer 是对的,Laravel 会自动为你处理这个问题。这称为路由模型绑定,可以在文档中找到:laravel.com/docs/5.8/routing#route-model-binding 如果您真的不希望发生这种情况,您可以简单地删除变量类型(所以只写 $circuits 作为参数) 谢谢。删除变量类型解决了它。 @GkChris99 请问您为什么这样做而不使用路由模型绑定?有了这个,你可以简单地删除 $circuits =circuits::findOrFail($circuits);在您的代码中并具有相同的效果? :) 【参考方案1】:

好的,让我们清理一下这个解决方案。很多小风格问题,如果不调整会伤害你的前进。

首先

在大多数标准命名约定和单数形式中,类名称以大写字母开头。

circuits.php

应该是。

Circuit.php

其次

您已经在使用模型绑定。如果您采用这种方法,您实际上可以直接返回电路。作为奖励Laravel 如果返回的数据是模型,则不必返回响应,除非您想将响应代码从 200 更改为其他值。

public function show(Circuit $circuit) 
    return $circuit;

你也误解了firstOrFail()。你写的这段代码永远不会返回多个电路,这将返回一个单一的模型。

$circuits = circuits::findOrFail($circuits);

【讨论】:

以上是关于显示功能不起作用。无法按 id 检索元素。拉拉维尔 5.8的主要内容,如果未能解决你的问题,请参考以下文章

拉拉维尔 |雄辩的 foreach 不起作用

拉拉维尔 | Auth::user()->id 在 AppServiceProvider 中不起作用

检索最后插入的 Id。拉拉维尔

required_if 带有数组验证规则的验证规则不起作用 |拉拉维尔 |验证

用于显示集合的刀片组件继承。拉拉维尔 7

拉拉维尔。迁移。添加字段[重复]