Comments (3)
I think that will better be alleviated by making it clear in documentation than what you are suggesting.
User have to know how he shouldn't use where, and having a note or a warning should suffice.
I don't believe it's necessary.
If it's really that necessary, which I don't believe it is, then adding what you are explaining as an example or even better adding to Yii cookbook.
from active-record.
I don't get need of that. Could you provide an example with some data?
from active-record.
For example, you could have a base class BaseModel that scopes all records by current user like where(['user' => Yii::$app->user->id])
or andWhere(['user' => Yii::$app->user->id])
. You'd expect that any child class like Messages, Invoices, ...etc, to be scoped by the current user. If during execution at any point after scoping where()
is used, user scoping would be lost. This is not a far-fetched scenario especially with new programmers who know nothing (yet) about the base class.
While where()
would overwrite other where()
, andWhere()
, and orWhere()
conditions too like andWhere(['read => false])
to show only new messages, such bug would result in showing both read and unread user messages instead of read only. A error yes but not disastrous. But imagine the same thing happening with user scoping condition in an email service or invoicing system you are building, user scoping would be lost and users would see each others' messages or invoices, this would be a disaster.
That's why a top level WHERE
condition (e.g. fixedWhere()
) not affected by and/or/where()
during execution would provide a kind of safe zone or an extra safety layer to avoid such scenarios, making the framework safer in handling such scenarios. Of course fixedWhere()
could be used again later during execution but I assume who does that would know what exactly he's doing and why. Furthermore, if the default behavior of fixedWhere()
is accumulative (adding conditions instead of replacing them) unless forced to replace via an option as explained above, there still could be bugs but not as disastrous. For example no invoices displayed at all instead of mixing up users' invoices.
Finally, I see where()
as a possible problem area as it could wipe out all previous conditions. Of course such function is required but with complex structures and inheritance, I'd prefer if it is handled in a way that makes using it less prone to errors.
from active-record.
Related Issues (20)
- Installation problems HOT 2
- It is impossible to create relation with "not equal" condition. OnCondition not supports conditions for columns HOT 2
- Is it possible to turn off validation in this implementation? HOT 4
- Can not update dependencies
- Any chance we could get a DataMapper ORM? HOT 1
- Error after update yiisoft/factory
- After PR #165 connection created every time when create an AR entity HOT 1
- Is it really necessary tableName as non static method? HOT 1
- ActiveRecord::insert(). When writing, it does not write fields. HOT 1
- update link
- Cannot serialize active record
- Use global `\InvalidArgumentException`
- Can ActiveRecord implement the interface ArrayableInterface, like Yii2? HOT 1
- `ActiveQuery` class should not extend `Yiisoft\Db\Query\Query` HOT 1
- Remove flag arguments from AR methods
- The method allPopulate in ActiveQuery will execute populate twice during execution
- PHPUnit 9.6.15 Warning - The configuration file did not pass validation!
- TableName() has no effect HOT 1
- update irc link
- The parameter identical of the method isAttributeChanged in class BaseActiveRecord has no effect when its value is false. HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from active-record.