PopUp - Link1 table [message #5558] |
Mon, 23 May 2016 04:44  |
htManager
Messages: 456 Registered: May 2014
|
Senior Member |
|
|
Hi Tony,
I have two tables (training_exercises, key exercise_id, rdcaccount_id and training_categories, key category_id, rdcaccount_id) which I linked (table training_category_exercises, key cat_training_category_id, cat_rdcaccount_id, ex_training_exercise_id, ex_rdcaccount_id) with a link1 pattern to define which exercise is related to which category because an exercise can be related to more than one category.
Now I want to choose an exercise which is possible with a popup1 pattern for table training_exercises. But I want to choose the category first, see the linked exercises and choose one of these linked exercises.
Is this possible and if yes, how and which pattern should I use?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Re: PopUp - Link1 table [message #7415 is a reply to message #7414] |
Sun, 15 March 2020 15:16   |
htManager
Messages: 456 Registered: May 2014
|
Senior Member |
|
|
It looks like you have two tables called TEAM and TEAM_MEMBER which are in a one-to-many relationship with TEAM as the 'one' and TEAM_MEMBER as the 'many'. Your POPUP1 screen should therefore refer toTEAM on its own while the POPUP2 should refer to TEAM as the 'outer' entity and TEAM_MEMBER as the 'inner'. That is right.
You do not say which pattern you are using to call the POPUP2 screen. It cannot be an ADD4 as it does not have a visible screen. The popup2 will be called as described in FAQ79. I thought that it would be possible to insert the selected items with the add4 pattern.
FAQ79 states that you would normally call a POPUP2 screen by passing in $where the identity of a single row in the 'outer' entity, in which case it will display that selected row in the outer zone and populate the inner zone will all associated rows from the inner entity. However, if the $where string is empty you will need code in the _cm_initialise() of the inner entity to pause the execution of the POPUP2 screen and call a POPUP1 screen in order to prove a non-empty value for the $where string. I think that the problem with $where is because I have a navigation button in the list2 pattern of the team_member table. I thought that it would be possible to choose the 'new' team in the team_member table and then add the team members of the last saison team. This is why the §where isn't empty. $where has the key values of the 'new' team member primary key.
You say that your first problem is that in the _cm_initialise() method of the TEAM table you have to clear the contents of the $where string so that it will retrieve all possible entries. The value which appears in the $where string for a popup form is set in the _cm_popupCall() method which calls that popup, so if you want an empty $where string then you must set $where to NULL (or an empty string) in that _cm_popupCall() method. I tried this but maybe I made mistakes and I didn't succeed.
It is only when you call a POPUP2 screen that the $where string may point to a row on the 'outer' entity. If a non-blank value is supplied the POPUP2 form will perform a lookup on the 'outer' entity using this value then populate the 'inner' with rows which belong to that 'outer' row. If the $where string you pass to a POPUP2 form is empty then it will fail unless you follow FAQ79. I get the correct team members shown in the popup2 form of the choosen team. But I don't get them in the _cm_popupReturn() method.
You say that you cannot change $settings['select_one'] = true for the POPUP2 form when activated from the _cm_initialise() method in the TEAM_MEMBER table, but this is not correct. If you look at the arguments for the scriptNext() function (see https://www.tonymarston.net/php-mysql/functions-and-variable s.html#func.scriptnext) you will see that the 4th argument is an array of task details. You can provide this argument with a value such as $array['settings'] = 'select_one=TRUE' in order to provide the desired effect. If you want multiple settings you must separate them with an '&' such as as in 'select_one=TRUE&choose_single_row=TRUE' I can change the settings of the popup2 form. But not of the popup1 form to show the possible teams.
When you say that the 'Choose Null' button is not displayed in the POPUP2 form this is because $settings['select_one'] has been set to true for that popup. That is right. I can see it now if I change the setting from False to true.
I hope that you have more information to understand my problem.
[Updated on: Sun, 15 March 2020 15:22] Report message to a moderator
|
|
|
|
|
|
|
|
|
|
|
|
Re: PopUp - Link1 table [message #7425 is a reply to message #7424] |
Sun, 22 March 2020 09:41   |
htManager
Messages: 456 Registered: May 2014
|
Senior Member |
|
|
Thank you for your advice. I assume that this is your default solution for this situation?
In this (my) case I haven't thought of it yet. I have used the add3 pattern with a 'link' or 'intersection' table for example for counting the presence of team members or for assigning exercises to different exercise classes. This works fine.
The link table consists of the pkey fields of the two 'One'-tables. Can I add additional fields to the 'link' table? What I need are fields for height, weight etc. for the team members of this team for this year/season. These values will change from year to year.
In the Summary of 'How to handle a Many-to-Many relationship with PHP and MySQL' you wrote, that additional fields would make it much more complicated. Would this work at all? If not, have you a solution for this problem?
[Updated on: Mon, 23 March 2020 02:58] Report message to a moderator
|
|
|
|
|
|
|