# |
Jan 6th 2020, 19:50 |
thisimpetus |
'ordinance' field for Authors (and this is reflected in the Authors model). Here's where I'm stuck: |
# |
Jan 6th 2020, 19:50 |
thisimpetus |
Hey cake gurus. I've built a more involved UI for creating records for models with a hasMany association (here, Publication hasMany Authors). So where Cake bakes something like ` $this->Form->control( 'authors._ids', ['options' => $authors)`, I've built a javascript UI that's a little more graphical, and, importantly, also allows adding an |
# |
Jan 6th 2020, 18:41 |
ashesh.social |
I’m getting error when following the documentation |
# |
Jan 6th 2020, 18:40 |
ashesh.social |
I’m getting when following the documentation |
# |
Jan 6th 2020, 18:40 |
ashesh.social |
How to run shell scripts in cakephp 4 ?? |
# |
Jan 6th 2020, 17:36 |
ckjksl |
Alternatively, I've also tried saving it as associated data: ```$asset->tags = $assettags; $this->Assets->save($asset);``` But the duplication still happens, like the saveStrategy isn't being applied at all. |
# |
Jan 6th 2020, 17:33 |
ckjksl |
Then I link them: ```$assetsTable = TableRegistry::getTableLocator()->get('Assets'); $assetsTable->tags->link($asset, $assettags);``` According to the saveStrategy=>replace, I should be replacing its related tags completely. But what happens is that I click on that postlink three times, and I'll end up with those tag associations three times, to a total of 9. |
# |
Jan 6th 2020, 17:31 |
ckjksl |
Then for each of that tags array, I retrieve the tag and put it in an array: ```$tagEntity = $this->tags->find()->where(['title'=>$tag])->first(); $assettags[] = $tagEntity;``` |
# |
Jan 6th 2020, 17:28 |
slackebot |
array('id'=>"1", 'tags'=>['sleepy', 'smelly', 'happy']) ) );``` All that should do is update the tags for `asset` id 1 with 3 tags. |
# |
Jan 6th 2020, 17:28 |
ckjksl |
I think the relations are okay, because they're associating and saving okay, and I can retrieve the results. The problem happens when I try to add more tags. in my `test.ctp`, I have the following POST link: ```echo $this->Form->postLink( 'Update Tags (asset_id 1, \'sleepy\', \'smelly\', \'happy\' )', array('controller' => 'Assets','action' => 'updateTags'), array( 'confirm' => 'Are you sure?', 'data' => |
# |
Jan 6th 2020, 17:25 |
ckjksl |
so in the model, `AssetsTable` has: ```$this->belongsToMany('Tags', [ 'joinTable' => 'AssetTags', 'saveStrategy'=>'replace' ]);``` `TagsTable` has: ```$this->belongsToMany('Assets', [ 'joinTable' => 'AssetTags', 'saveStrategy'=>'replace' ]);``` `AssetTagsTable` has: ```$this->belongsTo('Assets', [ 'foreignKey' => 'asset_id', ]); $this->belongsTo('Tags', [ 'foreignKey' => 'tag_id', ]);``` |
# |
Jan 6th 2020, 17:22 |
ckjksl |
I'm having a bit of trouble with a simple "toxi" tag solution. This is where there are three tables, `assets`, `tags`, and `assettags`, which contains `asset_id` and `tag_id` as a lookup. I've tried a couple of ways, but the part that's failing for me is `'saveStrategy' => 'replace'` |
# |
Jan 6th 2020, 16:43 |
ricksaccous |
but that would be too hard to explain to you, heh |
# |
Jan 6th 2020, 16:43 |
ricksaccous |
you can also do an inner join and then directly search on the field |
# |
Jan 6th 2020, 16:42 |
ricksaccous |
if you want them in the match then just do something similar but do $this->Matches->find()->where(['Matches.id' => $id])->contain(['SeasonPlayers' => function ($q) |
# |
Jan 6th 2020, 16:42 |
ricksaccous |
$seasonPlayerEntities = $this->Matches->SeasonPlayers->find(['SeasonPlayers.club_id' => $matchEntity->field_name])->toArray(); |
# |
Jan 6th 2020, 16:40 |
gianmarxgagliardi |
I would like to compare the underlined fields in order to take only the players who are associated with a certain id and not all the players |
# |
Jan 6th 2020, 16:40 |
ricksaccous |
whatever you can just do this $matchEntity = $this->Matches->get($id); |
# |
Jan 6th 2020, 16:39 |
ricksaccous |
just id? |
# |
Jan 6th 2020, 16:39 |
ricksaccous |
of Matches |
# |
Jan 6th 2020, 16:39 |
ricksaccous |
what is the primary key |
# |
Jan 6th 2020, 16:39 |
slackebot |
<gianmarxgagliardi> |
# |
Jan 6th 2020, 16:38 |
ricksaccous |
it's related to the Matches.home_id ? |
# |
Jan 6th 2020, 16:38 |
ricksaccous |
but it isn't related to id huh |
# |
Jan 6th 2020, 16:38 |
ricksaccous |
ohhh |
# |
Jan 6th 2020, 16:37 |
ricksaccous |
$matchEntity = $this->Matches->find()->matching('SeasonsPlayers', function ($query) use ($id) { return $query->where(['SeasonsPlayers.club_id' => $id]); })->contain(['Foo','Bar']); |
# |
Jan 6th 2020, 16:37 |
gianmarxgagliardi |
it gives me an empty set |
# |
Jan 6th 2020, 16:36 |
gianmarxgagliardi |
it gives me the whole empty |
# |
Jan 6th 2020, 16:36 |
ricksaccous |
replace where with matching i already told you |
# |
Jan 6th 2020, 16:35 |
gianmarxgagliardi |
```$matchHome1 = $this->Matches->find('all') ->where(['MatchPlayers.SeasonPlayers.club_id' => $matchHome->club_home_id]) ->contain(['SeasonReferees','SeasonReferees.Referees', 'ClubsHome', 'MatchPlayers','MatchPlayers.SeasonPlayers','MatchPlayers.SeasonPlayers.Players']);``` |
# |
Jan 6th 2020, 16:34 |
gianmarxgagliardi |
ok it turns but some problem |
# |
Jan 6th 2020, 16:27 |
ricksaccous |
i'll help |
# |
Jan 6th 2020, 16:27 |
ricksaccous |
read the thing and try to figure it out if you still have trouble after reading |
# |
Jan 6th 2020, 16:27 |
gianmarxgagliardi |
? |
# |
Jan 6th 2020, 16:27 |
gianmarxgagliardi |
how could I do |
# |
Jan 6th 2020, 16:23 |
ricksaccous |
etc |
# |
Jan 6th 2020, 16:23 |
ricksaccous |
->matching('SeasonPlayers', function ($q) |
# |
Jan 6th 2020, 16:23 |
ricksaccous |
you're right sorry |
# |
Jan 6th 2020, 16:23 |
ricksaccous |
and use matching |
# |
Jan 6th 2020, 16:23 |
ricksaccous |
actually you could keep what you have without the where |
# |
Jan 6th 2020, 16:22 |
ricksaccous |
read this |