如果我使用MySQL,以下代码将正常工作。当我切换到MS SQLServer时出现错误。我已经启用了pdo sqlsrv驱动程序。我的数据库有一个名为products的表,但是它显示的对象名称无效。
Product.php(模型)
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
protected $connection = 'sqlsrv';
}
?>
database.php
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => env('DB_EXT_HOST', 'localhost'),
'database' => env('DB_EXT_DATABASE', 'forge'),
'username' => env('DB_EXT_USERNAME', 'forge'),
'password' => env('DB_EXT_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
]
控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Product;
use App\Http\Requests;
class APIController extends Controller
{
public function index(Request $request)
{
$products = Product::paginate(5);
return response(array(
'error' => false,
'products' =>$products->toArray(),
),200);
}
}
?>
输出:
SQLSTATE [42S02]:[Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]无效的对象名称“产品”。 (SQL:从[products]中选择count(*)作为汇总)
如果添加正确的架构不起作用,则可能是用户的权限问题。我猜您正在使用“伪造”用户访问数据库-该用户对该表具有选择权限吗?
您可能必须运行此命令才能确定:
GRANT SELECT ON dbo.products TO forge
我知道我开派对很晚,但这可能会对其他用户有所帮助。
除非明确指定其他名称,否则将使用类的多个名称作为表名称
因此,在您的情况下,表名products
与型号product
不同。只需将以下行添加到模型中即可:
protected $table = 'products';