I’ve been trying to figure out for a week or so, how I can make a proper friendship system in CakePHP. I’ve read this and this thread but I can’t get it to work.
I’ve read a lot more threads regarding this, but nobody seems to have a proper example.
I currently have a table users (id, username, password, e-mail etc.) and a table friendships (id, user_to, user_from, status).
Step 1 – Friendship request
If a user does a friendship request, then a row is inserted with the requesting user_id and the user_id of the user from whom the friendship is request, so it could look like:
id | user_from | user_to| status
1 | 1 | 2 | 0
This way I can easily show pending friends of user_id = 2, by selecting all records where user_to = 2
Step 2 – Confirm friendship
I’ve set it up so that user_id 2 now sees that user_id 1 wants to become friends, if he clicks the confirmation link, the status will be changed to 1, see below
id | user_from | user_to| status
1 | 1 | 2 | 1
I created all kinds of checks so the row stays unique.
Step 3 – Show friends
I thought this would be easy, if I want to show the friends of user_id = 1 then I just do a select with user_from = 1 OR user_to = 1, however this doesn’t work.
User_id 1 can be a requester but can also be requested, so a JOIN will show strange results.
Does anyone know a solution? I’m happy to rebuild the entire system if I’m not doing the entire thing right! Any hints in the right direction are welcome as well…
Here is my solution : the difficulty lies in the correct request because friend requests can be crossed (if A asks B or B asks A will be stored the opposite way in the “to” and “from” fields of the table). Lets do it like that and user UNION and aliases to get friends from any user independently of the relation table bellow.
The request below always gives the wanted results ! (replace %d by the user ID or user Id in the SESSION