Yii2框架表连接
问题描述:
我在模型Yii2框架表连接
public function getApplication()
{
return $this->hasOne(Applications::className(), ['application_id' => 'application_id']);
}
public function getAccount()
{
return $this->hasOne(Accounts::className(), ['account_id' => 'account_id']);
}
public function getUser()
{
return $this->hasOne(Users::className(), ['user_id' => 'oncall_id']);
}
并在视图定义如下关系:
GridView::widget([
'dataProvider' => $dataProvider,
'tableOptions' => ['class' => 'table table-bordered table-hover table-striped'],
'columns' => [
['attribute' => 'oncalls.start_date', 'value' => 'start_date', 'headerOptions' => ['width' => '10%']],
['label' => 'Shift', 'value' => function($data) {
if ($data->shift_start && $data->shift_end)
return $data->shift_start . " -> " . $data->shift_end;
}],
'account.account_name',
'application.application_name',
'user.real_name',
['label' => 'Priority', 'value' => function ($dataProvider) {
if ($dataProvider->priority == 1)
return "Primary";
else
return "Secondary";
}],
'user.phone_1',
'user.phone_2',
],
]);
但是,在调试器中,似乎有过多的查询正在进行。 对于每个分配记录,有一个适当的表(用户,应用程序,帐户)的选择查询
我该如何避免有这些查询,只是有一个与所有这些值的联合声明?
答
您可以在查询中使用“with”或“joinWith”。
$dataProvider->query->with('account', 'application', 'user');
http://www.yiiframework.com/doc-2.0/yii-db-activequerytrait.html#with()-detail
+0
谢谢!完美的作品:) – Dunams
ü可以编辑dataProvider中传递到GridView控件在searchmodel – mohsen
@mohsen,你的意思编辑的数据提供程序,在关系模型中的设定是什么,你能不能举个例子? – Dunams