# |
Jul 25th 2017, 16:54 |
cleptric |
What about extracting the logic inside your `beforeSave` into a method and call it in you shell and beforeSave? |
# |
Jul 25th 2017, 16:53 |
rogerpro |
This is on a shell. |
# |
Jul 25th 2017, 16:52 |
slackebot1 |
$this->$model->find()->where([ ‘id’ => ‘5c12a233-f0c6-449f-b493-28b4912b528e’ ]); // just for testing with only 1 entity $my_event = new \Cake\Event\Event(‘Model.beforeSave’); foreach ($q as $key => $value) { $this->$model->beforeSave($my_event, $value); } } ``` |
# |
Jul 25th 2017, 16:52 |
rogerpro |
I understand, thanks. So now I’m running entities in a foreach loop and the beforeSave is executed, but not actually saved the value. ``` /** * Resave all entities of a model. * * This will trigger many events (i.e. beforeSave) so data will * be consistent with the current implementation of the Entity. */ public function resave($model = ‘’) { $this->loadModel($model); $q = |
# |
Jul 25th 2017, 16:31 |
dereuromark |
you cannot, by design, for atomatic operations, just dont use them if you need the callbacks |
# |
Jul 25th 2017, 16:19 |
rogerpro |
Maybe will be good to enable after and beforeSave on `updateAll` upon request as a feature. |
# |
Jul 25th 2017, 16:17 |
rogerpro |
I can just refactor the logic of the `beforeSave` and call it from a Shell and from the `beforeSave` itself. But I just wanted to know how to do it _comme il faut_ |
# |
Jul 25th 2017, 16:16 |
rogerpro |
For efficiency, @admad. Why using a behaviour many times per minute if I only want it once a year? |
# |
Jul 25th 2017, 16:15 |
rogerpro |
And, by the way, `updateAll`does not trigger `beforeSave` https://book.cakephp.org/3.0/en/orm/saving-data.html#bulk-updates |
# |
Jul 25th 2017, 16:14 |
admad |
Why not if it does the job you want? |
# |
Jul 25th 2017, 16:13 |
rogerpro |
About CounterCacheBehavior: I don’t want to enable a Behaviour on a Model just to use it once. I will study it more deeply |
# |
Jul 25th 2017, 16:12 |
rogerpro |
Yes, but this is not the case. I want tu run this “recalculation process” just now and maybe for some particular reasons on the future. Not on any regular basis. |
# |
Jul 25th 2017, 16:11 |
cleptric |
Normally you would call `updateAll` in your afterSave if you want to update something based on a saved entity |
# |
Jul 25th 2017, 16:11 |
rogerpro |
Thanks! I will take a look. It was mentioned many times at CakeFest |
# |
Jul 25th 2017, 16:10 |
rogerpro |
Maybe with an Expression on the query() but… I find this complicated |
# |
Jul 25th 2017, 16:10 |
cleptric |
It does similar things |
# |
Jul 25th 2017, 16:10 |
cleptric |
Have a look at the CounterCacheBehavior |
# |
Jul 25th 2017, 16:10 |
rogerpro |
The goal is to trigger a save on all entities. `afterSave`will work for only one specific entity |
# |
Jul 25th 2017, 16:09 |
rogerpro |
I’m playing with the console and `$my_table->query()->update()->execute);` but it needs a SET |
# |
Jul 25th 2017, 16:08 |
cleptric |
`afterSave`? :slightly_smiling_face: |
# |
Jul 25th 2017, 16:08 |
rogerpro |
As a challenge, I want to have it on a shell, in a good Cake way. Not only running SQL which I can do in 2 minutes |
# |
Jul 25th 2017, 16:08 |
rogerpro |
In other words, I want to recalculate a specific field for all files of the table |
# |
Jul 25th 2017, 16:07 |
rogerpro |
Just to “resave” all entities to force running beforSave(), which is a method that I created after many entities were saved |
# |
Jul 25th 2017, 16:06 |
cleptric |
What do you want to do? |
# |
Jul 25th 2017, 16:05 |
rogerpro |
Sorry, I mean already existing entities |
# |
Jul 25th 2017, 16:05 |
cleptric |
Add the method to your table |
# |
Jul 25th 2017, 16:04 |
rogerpro |
What is the best way to run `beforeSave()` for all the entities of a table? |
# |
Jul 25th 2017, 16:00 |
cleptric |
Wouldn’t be a compound key be sufficient? |
# |
Jul 25th 2017, 15:59 |
neon1024 |
Shouldn’t the join/pivot table have a primary key? |
# |
Jul 25th 2017, 15:49 |
ra7bi |
Tks |
# |
Jul 25th 2017, 15:49 |
ra7bi |
Yah, i got it |
# |
Jul 25th 2017, 15:45 |
ra7bi |
@cleptric do you think i should have 2 tables one for followers and other for following ? |
# |
Jul 25th 2017, 15:45 |
ra7bi |
or how DB should look like |
# |
Jul 25th 2017, 15:44 |
ra7bi |
follow / following |
# |
Jul 25th 2017, 15:44 |
ra7bi |
So be frank with you This is something I'm looking forward to knowing. I do not understand the structure of this system |
# |
Jul 25th 2017, 15:43 |
cleptric |
Wouldn’t the follower thing just be a relation between Users and Users with another join table? |
# |
Jul 25th 2017, 15:42 |
ra7bi |
i think it will work |
# |
Jul 25th 2017, 15:42 |
ra7bi |
followed => who follow me following => who im following user_id => my id |
# |
Jul 25th 2017, 15:42 |
ra7bi |
so i could name it followers and it has user_id / followed_id / following_id |
# |
Jul 25th 2017, 15:41 |
cleptric |
@ra7bi I think that you also could name the table `foo_bar` as long as you configure it correctly in your Tables. I don’t certainly know of any “conventions” besides the one mentioned above. |
# |
Jul 25th 2017, 15:40 |
ra7bi |
,:) |