主键与 laravel 搜索的默认 id 不同

Posted

技术标签:

【中文标题】主键与 laravel 搜索的默认 id 不同【英文标题】:Primary Key is different from the default id that laravel searches for 【发布时间】:2022-01-13 13:07:04 【问题描述】:

我在表中添加了一个自定义主键,现在 Laravel 甚至根本找不到结果。给出找不到页面的错误。

NotFoundHttpException

模型 [App\usersinformation] 没有查询结果。

控制器--------

public function show(usersinformation $usersinformation)

    //
  //  $users =  $user = usersinformation::where('user-id','=',$usersinformation) -> first();
    
        return view('usersinformation.show');


型号-------

class usersinformation extends Model

    //

    public $table = "usersinformation";
    public $incrementing = false;
    
    protected $fillable = [

        'fname','lname', 'user-picture', 'phone-number', 'user-id', 'place-id'

    ];
    protected $primaryKey = 'user-info-id';

    public function users()
        $this -> belongsTo('App\users');
    

路由----web.php

Route::post('/show','App\Http\Controllers\usersinformationController@show');

还是遇到同样的问题,如果我注释了主键,当我在模型中添加自定义主键时,会报错在表中找不到id字段,它会报错页面找不到。

【问题讨论】:

自定义键是字符串还是整数? 【参考方案1】:

你正在输入usersinformation $usersinformation,所以它试图找到你传入的 ID 的记录。在下一行中,你试图将 id 传递给用户 ID,所以我猜测您实际上是在将用户 ID 传递给路由,而不是用户信息行的 ID。如果是这种情况,那么您需要更改类型提示,使其在进入函数之前不会尝试查找记录。

public function show($user_id)

  $user_information = usersinformation::where('user-id','=',$user_id) -> first();
    
  return view('usersinformation.show', ['userinformation' => $user_information]);


您的 primaryKey 行很好,应该可以工作,但要知道,强烈建议不要在表名和列名中使用破折号,因为它会导致各种混乱。下划线要好得多。请参阅this link 了解更多信息。

【讨论】:

谢谢,我会努力让你知道结果的。 非常感谢它解决了这个问题。我有另一个问题,我想向具有参数的视图添加路由,并且想知道是否有任何方法可以在不传递参数的情况下添加它。 我建议您提出一个新问题,这样您就可以准确地解释您需要什么,并显示您已经创建的任何代码。

以上是关于主键与 laravel 搜索的默认 id 不同的主要内容,如果未能解决你的问题,请参考以下文章

mysql的联合主键与复合主键区别

jango 模型管理数据model,数据库外键主键与一对一,一对多,多对多关系

外键作为主键或仅将代理主键与 JPA 上下文中的外键不同

MySQL:为啥将主键与不​​使用索引的随机生成的数字进行比较?

mysql中,主键与普通索引

[MySQL] innoDB引擎的主键与聚簇索引