UserSearch avoid fields name conflict if joined with other tables

This commit is contained in:
liviuk2
2023-10-16 11:03:28 +02:00
committed by GitHub
parent 723ae81d11
commit cd7d74d9a1

View File

@ -11,7 +11,9 @@
namespace Da\User\Search; namespace Da\User\Search;
use Da\User\Model\User;
use Da\User\Query\UserQuery; use Da\User\Query\UserQuery;
use Da\User\Traits\ContainerAwareTrait;
use Yii; use Yii;
use yii\base\InvalidParamException; use yii\base\InvalidParamException;
use yii\base\Model; use yii\base\Model;
@ -19,6 +21,8 @@ use yii\data\ActiveDataProvider;
class UserSearch extends Model class UserSearch extends Model
{ {
use ContainerAwareTrait;
/** /**
* @var string * @var string
*/ */
@ -106,21 +110,23 @@ class UserSearch extends Model
return $dataProvider; return $dataProvider;
} }
$userClass = $this->getClassMap()->get(User::class);
if ($this->created_at !== null) { if ($this->created_at !== null) {
$date = strtotime($this->created_at); $date = strtotime($this->created_at);
$query->andFilterWhere(['between', 'created_at', $date, $date + 3600 * 24]); $query->andFilterWhere(['between', $userClass::tableName().'.created_at', $date, $date + 3600 * 24]);
} }
if ($this->last_login_at !== null) { if ($this->last_login_at !== null) {
$date = strtotime($this->last_login_at); $date = strtotime($this->last_login_at);
$query->andFilterWhere(['between', 'last_login_at', $date, $date + 3600 * 24]); $query->andFilterWhere(['between', $userClass::tableName().'.last_login_at', $date, $date + 3600 * 24]);
} }
$query $query
->andFilterWhere(['like', 'username', $this->username]) ->andFilterWhere(['like', $userClass::tableName().'.username', $this->username])
->andFilterWhere(['like', 'email', $this->email]) ->andFilterWhere(['like', $userClass::tableName().'.email', $this->email])
->andFilterWhere(['registration_ip' => $this->registration_ip]) ->andFilterWhere([$userClass::tableName().'.registration_ip' => $this->registration_ip])
->andFilterWhere(['last_login_ip' => $this->last_login_ip]); ->andFilterWhere([$userClass::tableName().'.last_login_ip' => $this->last_login_ip]);
return $dataProvider; return $dataProvider;
} }