如何在Laravel中构建查询

Gre*_*try 2 php sql-server laravel

我是laravel的新手,在了解查询构建器的工作原理方面遇到了一些问题.

我创建了一个laravel项目并将其成功连接到sqlsrv.现在我想从数据库中检索数据.

首先没有模型只是wep.php为了理解.

Route::get('/tasks', function () {
    $tasks = DB::table('WebShops')->get();
    dd($tasks);
});
Run Code Online (Sandbox Code Playgroud)

这是工作它向我显示所有数据库行.

现在我想用find命令过滤行,我得到一个错误:

Route::get('/tasks/{ShopID}', function($ShopID){
    $task = DB::table('WebShops')->find($ShopID);
    dd($task);
});
Run Code Online (Sandbox Code Playgroud)

SQLSTATE [42S22]:[Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]无效的列名"id".(SQL:从[WebShops]中选择前1*,其中[id] = 1)

这是令人困惑的,因为我分配了找到ShopID,现在我得到了正在搜索的错误id.为什么?

我也尝试了这个:

 Route::get('/tasks/{ShopID}', function($ShopID){
        $task = DB::table('WebShops')->where('ShopID', $ShopID);
        //dd($task->name); here comes also an error
        dd($task);

 });
Run Code Online (Sandbox Code Playgroud)

这向我展示了一个我不太了解的数据.

在此输入图像描述

我的DB看起来像这样: 在此输入图像描述

u_m*_*der 5

在代码中

Route::get('/tasks/{ShopID}', function($ShopID){
    $task = DB::table('WebShops')->find($ShopID);
    dd($task);
});
Run Code Online (Sandbox Code Playgroud)

你试图找到哪个字段等于$ShopID值的行?

Laravel不知道.因此,它假设您将字段id作为主键.由于您没有这样的字段,根据您的表结构,您有一个错误.

根据手册,您可以使用以下命令重新定义主键:

public $primarykey = 'ShopID';
Run Code Online (Sandbox Code Playgroud)

在您的模型文件中.

在第二次尝试中,要接收记录集合 - 添加get():

Route::get('/tasks/{ShopID}', function($ShopID){
    $task = DB::table('WebShops')->where('ShopID', $ShopID)->get();
    dd($task);
});
Run Code Online (Sandbox Code Playgroud)