Wie hole ich Chat -Daten mit eloquent mit Joins?MySql

MySQL DBMS-Forum
Anonymous
 Wie hole ich Chat -Daten mit eloquent mit Joins?

Post by Anonymous »

Ich versuche, mit eloquent in Laravel 11 über Chat-bezogene Daten zu holen, aber ich kämpfe darum, eine optimierte Abfrage mit eloquenten Beziehungen oder Verbindungen zu strukturieren. < /p>
Ich habe zwei MySQL-Tabellen : < /p>

Benutzer -> ID, full_name, profile_pic < /li>
CHAT_MESSAGES -> ID, SENTER_ID, Receiver_id, Nachricht, erstellt_at , read (0 = ungelesen, 1 = read) < /li>
< /ol>
Gewünschte Ausgabe:
Ich möchte die folgenden Daten für einen bestimmten Absender abholen (Sender_id = 1): < /p>

Code: Select all

{
"user": {
"id": 1,
"full_name": "Sender Name",
"profile_pic": "sender profile pic url"
},
"chat_message": {
"unread": 3, // count of unread messages from sender_id = 1
"last_message": "whatever it was", // last message sent by sender_id = 1
"created_at": "last message's sent time"
}
}
< /code>
Rohabfragen, die funktionieren: < /p>
// Fetch user details
SELECT id, full_name, profile_pic FROM users WHERE id = 196;

// Count unread messages from sender_id = 196
SELECT COUNT(id) FROM chat_messages WHERE read = 0 AND sender_id = 196 AND receiver_id = 197;

// Get last message from sender_id = 196
SELECT message, created_at
FROM chat_messages
WHERE sender_id = 196 AND receiver_id = 197
ORDER BY id DESC
LIMIT 1;
Meine Frage:
Gibt es eine effiziente Möglichkeit, dies mit eloquenten Beziehungen oder Verbindungen anstelle mehrerer Rohfragen zu erreichen?
Wie kann ich dies für die Leistung in Laravel 11 optimieren? holt MySQL jede Zeile aus Tabelle 1 nacheinander aus und sucht dann nach einer passenden Zeile in Tabelle 2, bevor sie zur nächsten Zeile wechselt? 1 und dann schließen Sie sich ihnen mit Tabelle 2 an, basierend auf Einschränkungen? Dank im Voraus. 🙌 < /p>
Tabelle mit Dummydaten zum Testen. < /P>

Code: Select all

CREATE TABLE `chat_messages` (
`id` bigint(20) UNSIGNED NOT NULL,
`sender_id` bigint(20) UNSIGNED NOT NULL,
`receiver_id` bigint(20) UNSIGNED NOT NULL,
`message` text NOT NULL,
`read` tinyint(3) UNSIGNED NOT NULL DEFAULT 0,
`created_at` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `chat_messages` (`id`, `sender_id`, `receiver_id`, `message`, `read`, `created_at`) VALUES
(1, 196, 197, 'Some message 1', 0, '2025-02-14 00:04:47'),
(2, 196, 197, 'Some message 2', 0, '2025-02-14 00:10:02'),
(3, 196, 197, 'Some message 3', 0, '2025-02-14 00:11:06'),
(4, 197, 196, 'Some message 4', 0, '2025-02-14 00:11:31'),
(5, 196, 197, 'Some message 5', 0, '2025-02-14 00:13:11'),
(6, 197, 196, 'Some message 6', 0, '2025-02-14 00:13:15'),
(7, 196, 197, 'Some message 7', 0, '2025-02-14 00:13:51'),
(8, 197, 196, 'Some message 8', 0, '2025-02-14 00:14:04'),
(9, 196, 197, 'Some message 9', 0, '2025-02-14 00:14:13'),
(10, 197, 196, 'Some message 10', 0, '2025-02-14 00:14:20'),
(11, 196, 197, 'Some message 11', 0, '2025-02-14 00:14:40'),
(12, 197, 196, 'Some message 12', 0, '2025-02-14 00:14:47'),
(13, 197, 196, 'Some message 13', 0, '2025-02-14 00:15:02'),
(14, 196, 197, 'Some message 14', 0, '2025-02-14 00:15:11'),
(15, 196, 197, 'Some message 15', 0, '2025-02-14 00:25:08'),
(16, 197, 196, 'Some message 16', 0, '2025-02-14 00:25:15'),
(17, 196, 197, 'Some message 17', 0, '2025-02-14 00:25:30'),
(18, 196, 197, 'Some message 18', 0, '2025-02-14 00:27:48'),
(19, 197, 196, 'Some message 19', 0, '2025-02-14 00:27:53'),
(20, 196, 197, 'Some message 20', 0, '2025-02-14 00:27:58'),
(21, 196, 197, 'Some message 21', 0, '2025-02-14 00:28:59'),
(22, 197, 196, 'Some message 22', 0, '2025-02-14 00:29:01'),
(23, 196, 197, 'Some message 23', 0, '2025-02-14 00:29:15'),
(24, 197, 196, 'last message from 197', 0, '2025-02-14 00:29:18'),
(25, 196, 197, 'last message from 196', 0, '2025-02-14 00:29:23');

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post