为什么搜索查询总是使用ID?

时间:2017-05-19 03:23:14

标签: php laravel

我正在尝试使用->find()

我想查询谎言

Where IdBiodata = '$IdBiodata'

然后我尝试这样:

Route::get('biodata/{IdBiodata}', function ($IdBiodata) {
    $databiodata = DB::table('Biodata')->find($IdBiodata);
        if(count($databiodata)) {
            return view('biodata/vew',compact('databiodata'));
        }else{
            echo "Data not Found";
        }
});

我跑的时候。我面对这个

  

SQLSTATE [42S22]:[Microsoft] [SQL Server Native Client 10.0] [SQL   服务器]无效的列名称'id'。 (SQL:从[Biodata]中选择前1 *   其中[id] = 1)

我该如何解决?提前谢谢

我的表结构

CREATE TABLE [dbo].[Biodata](
    [IdBiodata] [int] IDENTITY(1,1) NOT NULL,
    [Nama] [varchar](max) NULL,
    [Umur] [int] NULL,
 CONSTRAINT [PK_Biodata] PRIMARY KEY CLUSTERED 
(
    [IdBiodata] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

2 个答案:

答案 0 :(得分:1)

find()函数始终使用主键..如果您要通过其他字段过滤它,则可以使用where()代替find() ..这里'一个使用您的查询的例子

$databiodata = DB::table('Biodata')->where('IdBiodata',$IdBiodata)->get();

答案 1 :(得分:1)

使用查询构建器编写的搜索查询不使用 Eloquent ORM find()函数按主键和主键检索记录始终将列名称设为{ {1}}直到除非您无法在外部定义。

所以当你写这个id时,它假定主键为id。

$databiodata = DB::table('Biodata')->find($IdBiodata);中,您可以更改主键

Eloquent ORM

现在,你可以写

class Biodata extends Eloquent {

    protected $primaryKey = 'IdBiodata';

}

如果您不想使用Eloquent ORM,那么只需使用其他功能而不是Biodata::find($IdBiodata); 使用find()

where()

现在使用以下代码替换您的代码 从这个

$databiodata = DB::table('Biodata')->where('IdBiodata',$IdBiodata)->get();

$databiodata = DB::table('Biodata')->find($IdBiodata);