У меня возникают проблемы с приложением Laravel, использующим существующую базу данных, в которой используются UUID MS SQL. У моего приложения есть заказчик:
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');
}
}
У которого (в собственном приложении 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');
}
}
CustomerController:
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']);
}
}
У клиента есть (по какой-либо причине) CustID (который люди используют для обозначения клиента), CustNum (который не используется вне базы данных и SysRowID. SysRowID используется для связывания таблицы Customer с таблицей Customer_UD.
Пример строки из Customer_UD:
Моя проблема в том, что при попытке вернуть поля UD вместе с полями клиента я получаю сообщение об ошибке:
SQLSTATE[HY000]: General error: 20018 Incorrect syntax near ''.
[20018] (severity 15) [select * from [ERP].[Customer_UD] where [ERP].
[Customer_UD].[ForeignSysRowID] = '���_�X�O�Q3�^w' and [ERP].
[Customer_UD].[ForeignSysRowID] is not null]
Я подумал, что это странно, поэтому я похвалил строки Customer_UD в CustomerController и просто попытался отобразить поле Customer UUID в блейд-шоу:
SysRowID: {{$Customer->SysRowID}}
Я ничего не получаю, ошибок нет, но нет данных. Я создал контроллер и блейд индекса для модели Customer_UD и могу отображать все поля базы данных Customer_UD, кроме поля UUID.
На самом деле я не хочу отображать поля UUID, но мне нужно использовать их для построения отношений. Может ли кто-нибудь помочь мне указать в правильном направлении?
Я пробовал (та же ошибка): $Customer = Customer::find($CustID) ->with ('Customer_UD') ->get(); Вы это имеете в виду или я что-то пропустил? @Адам
Нет, используйте мой точный синтаксис.
У меня такая же ошибка: SQLSTATE[HY000]: General error: 20018 Incorrect syntax near 'j'. [20018] (severity 15) [select top 1 * from [ERP].[Customer_UD] where [ERP]. [Customer_UD].[ForeignSysRowID] = 'j�B�i�PJ�J�.K�' and [ERP]. [Customer_UD].[ForeignSysRowID] is not null]
Это зашифрованный столбец varbinary UD_SysRevID?
Привет @adam, извиняюсь за задержку с ответом. Я почти уверен, что это стандартное поле GUID SQL Server. Есть ли способ быть уверенным?





Я обнаружил, что добавление:
'options' => [
PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER => true,
],
В конфигурации базы данных в config \ database.php проблема решена.
этот ответ - чистое ЗОЛОТО, где ты это нашел?
Вы пробовали получить доступ к нему как к отношениям?
$Customer->Customer_UD->all()