来自 SQL Server 数据库错误的 Laravel UUID

Ric*_*ock 1 sql-server uuid laravel eloquent

我在使用使用 MS SQL UUID 的现有数据库的 Laravel 应用程序中遇到问题。我的应用程序有一个客户:

class Customer extends Model
{
    protected $table = 'ERP.Customer';
    public $timestamps = false;
    protected $primaryKey = 'CustID';
    protected $keyType = 'string';

    protected $fillable = [
    'CustID',
    'SysRowID',
    'CustNum',
    'LegalName',
    'ValidPayer',
    'TerritoryID',
    'Address1',
    'Address2',
    'Address3',
    'City',
    'State',
    'Zip',
    'Country',
    'SalesRepCode',
    'CurrencyCode',
    'TermsCode',
    'CreditHold',
    'FaxNum',
    'PhoneNum',
    'CustomerType'
];

public function SalesTer()
{
    return $this->belongsTo(SalesTer::class,'TerritoryID', 'TerritoryID');
}

public function Shipments()
{
    return $this->hasMany(Shipment::class, 'CustNum', 'CustNum');
}

public function Equipments()
{
    return $this->hasMany(Equipment::class,'CustNum', 'CustNum');
}

    public function Customer_UD()
    {
         return $this->hasOne(Customer_UD::class,'ForeignSysRowID', 'SysRowID');
    }
}
Run Code Online (Sandbox Code Playgroud)

其中(在本机 ERP 应用程序中)有一个 UD 表,最终用户可以使用它来自定义 Customer 实体:

class Customer_UD extends Model
{
    protected $table = 'ERP.Customer_UD';
    protected $primaryKey = 'ForeignSysRowID';
    public $timestamps = false;
    public $incrementing = false;
    protected $keyType = 'string';

    protected $fillable = [
        'ForeignSysRowID',
        'MakesCans_c',
        'MakesEnds_c',
        'Industry_c'
    ];

    public function Customer()
    {
        return $this->hasOne(Customer::class,'SysRowID', 'ForeignSysRowID');
    }
}
Run Code Online (Sandbox Code Playgroud)

客户控制器:

 public function show($CustID)
{

    if(Customer::find($CustID))
    {
        $Customer = Customer::find($CustID);
        $Customer_UD = $Customer->Customer_UD()
            ->get();

        $Shipments = $Customer->Shipments()
            ->where('Voided', '0')
            ->get();
        $Equipments = $Customer->Equipments()
            ->with('Part') // load the Part too in a single query
            ->where('SNStatus', 'SHIPPED')
            ->get();
        return view('Customer.show', ['NoCust' => '0'], 
compact('Equipments', 'Customer','Shipments', 'Parts', 'Customer_UD'));

    }
    else
    {
        return view('Customer.show', ['NoCust' => '1']);
    }
}
Run Code Online (Sandbox Code Playgroud)

客户(无论出于何种原因)有一个 CustID(人们用它来指代客户)一个 CustNum(不在数据库外使用,还有一个 SysRowID。SysRowID 用于将 Customer 表与 Customer_UD 表链接起来。

Customer_UD 中的一个示例行是:

在此处输入图片说明

我的问题是,当尝试将 UD 字段与 Customer 字段一起返回时,出现错误:

SQLSTATE[HY000]: General error: 20018 Incorrect syntax near ''. 
[20018] (severity 15) [select * from [ERP].[Customer_UD] where [ERP]. 
[Customer_UD].[ForeignSysRowID] = '???_?X?O?Q?3?^w' and [ERP]. 
[Customer_UD].[ForeignSysRowID] is not null] 
Run Code Online (Sandbox Code Playgroud)

我觉得这很奇怪,所以我推荐了 CustomerController 中的 Customer_UD 行,并尝试在显示刀片中显示 Customer UUID 字段:

SysRowID: {{$Customer->SysRowID}}
Run Code Online (Sandbox Code Playgroud)

我什么也没得到,没有错误,但没有数据。我为 Customer_UD 模型创建了一个控制器和索引刀片,并且可以显示除 UUID 字段之外的所有 Customer_UD 数据库字段。

我实际上并不想显示 UUID 字段 - 但确实需要使用它们来建立关系。任何人都可以帮助我指出正确的方向吗?

Ric*_*ock 5

我发现添加:

'options' => [
PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER => true,
],
Run Code Online (Sandbox Code Playgroud)

到 config\database.php 中的数据库配置解决了这个问题。