我在使用 DBIC 視圖填充結果集時遇到問題。與連接表相關的所有列都是空的。
我的視圖定義定義如下:
package MySchema::CustomResults::ORDERS;
use Modern::Perl;
use base qw/DBIx::Class::Core/;
__PACKAGE__->table_class('DBIx::Class::ResultSource::View');
__PACKAGE__->table('ORDERS');
__PACKAGE__->result_source_instance->is_virtual(1);
__PACKAGE__->result_source_instance->view_definition(
'SELECT p.PROJECT_ID, p.PROJECT, p.Center_Id, p.IMPORT_TIMESTAMP, p.Delivery_CountryCode, p.SHIP_DATE, pp.VALUE AS ORDER_TYPE, pp.ADD_TIMESTAMP
FROM PROJECT p
LEFT JOIN PROJECT_ADDITIONS pp ON p.PROJECT_ID = pp.PROJECT_ID AND pp.FIELD = "ORDER_TYPE"
WHERE p.PROJECT_ID IN (?)'
);
__PACKAGE__->add_columns(
"project_id",
{ data_type => "integer", is_nullable => 0 },
"project",
{ data_type => "varchar", is_nullable => 0, size => 50 },
"center_id",
{ data_type => "varchar", is_nullable => 1, size => 50 },
"delivery_countrycode",
{ data_type => "char", is_nullable => 1, size => 2 },
"import_timestamp",
{
data_type => "datetime",
datetime_undef_if_invalid => 1,
default_value => "0000-00-00 00:00:00",
is_nullable => 1,
},
"ship_date",
{
data_type => "datetime",
datetime_undef_if_invalid => 1,
is_nullable => 0,
},
"order_type",
{ data_type => "varchar", is_nullable => 1, size => 255 },
"add_timestamp" =>
{
data_type => "datetime",
datetime_undef_if_invalid => 1,
default_value => "0000-00-00 00:00:00",
is_nullable => 1,
},
);
1;
如果我使用以下代碼搜索資料集:
my @associatedOrders = $self->schema->resultset('ORDERS')->search({},
{
bind => [ $projectId ]
}
)->all();
我得到所有預期的行,但連接表的資料PROJECT_ADDITIONS pp,order_type并且add_timestamp總是undef,如果我在記憶體資料庫中的 SQLlite 中執行它。如果我使用 MySQL 資料庫,我會得到完整的資料集。
uj5u.com熱心網友回復:
該視圖的問題是視圖定義中的 SQL 查詢。LEFT JOIN 中的引數用雙引號括起來,在 SQLite 中將被解釋為關鍵字。
我變了:
LEFT JOIN PROJECT_ADDITIONS pp ON p.PROJECT_ID = pp.PROJECT_ID AND pp.FIELD = "ORDER_TYPE"
進入:
LEFT JOIN PROJECT_ADDITIONS pp ON p.PROJECT_ID = pp.PROJECT_ID AND pp.FIELD = 'ORDER_TYPE'
它按預期作業。
uj5u.com熱心網友回復:
bind 引數不用于將任何內容傳遞給視圖。事實上,你甚至不需要這個視圖,只需要兩個表的結果類,project并project_additions通過它的主鍵找到專案,然后加入或預取與project_additions結果的關系。如果您使用兩個表的結果類進行搜索,它將生成與您的視圖定義完全相同的查詢:
$schema->resultset('Project')->find($projectId, { prefetch => 'Project_Addtitions' });
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/417084.html
標籤:
上一篇:-t在perl腳本的主體中
下一篇:DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ | TORCH.AUTOGRAD
