【发布时间】:2013-04-22 05:48:29
【问题描述】:
我的数据库中有两张表,其中一张与我的 Accounts 表相关联。
因此,在我的 Account.pm 架构结果中,我添加了以下行。
__PACKAGE__->has_many('subjects', 'MyApp::DBIC::Schema::Subject', {'foreight.account_id' => 'self.account_id'});
然后在我的控制器中进行这样的搜索。
$c->stash->{search_results} = $c->model('DB::Account')->search(
{ -or => [
firstname => {like => '%'.$search_term.'%'},
'subjects.subject_title' => {like => '%'.$search_term.'%'},
]
},
{
join => 'subjects',
rows => '3',
},
{
order_by => 'first name ASC',
page => 1,
rows => 10,
}
);
它没有输出任何错误,但我不知道如何在我的视图文件中输出结果。这是在两个表之间建立关系的正确方法吗?
我的目标:提供一个search_term,搜索两个表并将结果输出到视图文件中。我的 SQL 看起来像这样:
SELECT FROM Accounts,Subjects WHERE Accounts.firstname=$search_term OR Subjects.subject_title=$search_term LEFT JOIN Subjects ON Accounts.account_id=Subject.account_id
并且希望在视图文件中输出结果,如上所述。
我对 Perl 还很陌生,有些文档对我来说仍然没有多大意义。因此,感谢您提供任何帮助和提示。
【问题讨论】:
-
我不知道如何在我的视图文件中输出结果。 — 这是由
$c->stash->{search_results} = ...完成的。然后你如何处理它取决于你使用的视图。 -
这是在两个表之间建立关系的正确方法吗? — 通常你会在数据库模式中定义关系。但是,有时您仍然希望在调用查询时明确说明联接。
-
我的 SQL 看起来像 — 您可以通过在运行
yourapp_server.pl之前设置环境变量DBIC_TRACE=1来查看 SQL 的实际样子 -
感谢任何帮助和提示 — 您可能想在命令行脚本中
use您的数据库架构,以便您可以使用(并掌握) DBIC 没有包裹 Catalyst。 -
@Quentin 没有输出 SQL,所以我猜它没有执行任何东西?