Мне предлагают сделать users, но я не могу совместить клиентов и администратора в одну таблицу.С точки здравого смысла да, не можете. Вам никто и не предлагает это сделать. Вам предлагают следовать правилу SOLID. Так как сотрудники у вас имеют две функции: отвечать за аутентификацию и существовать в системе, то логично, что клиенты не могут быть сотрудниками с разделением по роли. Поэтому у вас несколько вариантов:
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['index'],
'allow' => true,
'roles' => ['@'],
'matchCallback' => function ($rule, $action) {
/** @var User $user */
$user = Yii::$app->user->getIdentity();
return $user->admin!=1
}
],
],
],
];
}
Upsert
Ещё одним существенным улучшением слоя работы с базами данных стала поддержка UPSERT — атомарной операции, которая создаёт новые записи, если они ещё не существуют (проверяется уникальный ключ), или изменяет существующие записи. Он или создаёт новую запись, или увеличит её счётчик посещений автоматически, если запись существует.
Есть просто вот такой фреймворк для ORM - https://www.redbeanphp.com/index.phpС этим фреймворком не знаком. Не могу посоветовать. Но могу сказать одно, что самописный PHP бред. Лучше тогда использовать микрофремворк, например Slim. Там можно подключить хоть AR, хоть Doctrine. Тут вы уж сам решайте. Однако на Yii2 начинать новый проект уже плохая история. Выбирайте Yii3, Laravel, Symfony, Slim. Предложенный вами фреймворк тоже бы не советовал, так как он не полпулярный.
У меня была дилемма, либо использовать ресурсы Yii, и найти ORM там, либо устанавливать Doctrine или RedBean PHP.
В документации так же есть Class yii\db\CommandМожете использовать и так.
Который в принципе делает тоже самое что и миграции, в таблице даже методы называются так же.
Не до конца понятна вот эта функция, которая позволяет вставить строку, даже если нет какого-то столбца в БД в таблице.Это не понял.
Всё, что может AR - это CRUD!Вы ошибаетесь. AR и Doctrine никак не влияют на архитектуру проекта и с той и стой ORM вы можете использовать хоть DDD.
Подсказка на будущее... Правильный вариант это только три таблицы.