Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I would suggest:</p> <ul> <li>Many-to-many: User &lt;-> Conversation. A <code>User</code> can have many <code>Conversation</code>s, a <code>Conversation</code> consists of two or more <code>User</code>s</li> <li>One-to-many: User &lt;-> Message. A <code>Message</code> belongs to one <code>User</code>. A <code>User</code> has many <code>Message</code>s</li> <li>One-to-many: Message &lt;-> Conversation. A <code>Message</code> belongs to one <code>Conversation</code>. A <code>Conversation</code> has many <code>Message</code>s.</li> </ul> <p>This will give you following SQL structure (only attributes interesting for the relationships listed):</p> <pre><code>users: id messages: id | user_id | conversation_id conversations: id conversations_users: conversation_id | user_id </code></pre> <p>Think about conversations like chat rooms, its basically one shared collection of messages between a couple of users.</p> <p>In Laravel, possible Eloquent models would look like this:</p> <pre><code>class User extends Eloquent { public function conversations() { return $this-&gt;belongsToMany('Conversation'); } public function messages() { return $this-&gt;hasMany('Message'); // not as relevant, because these are all messages across conversations } } class Message extends Eloquent { public function user() { return $this-&gt;belongsTo('User'); } public function conversation() { return $this-&gt;belongsTo('Conversation'); } } class Conversation extends Eloquent { public function messages() { return $this-&gt;hasMany('Message'); } public function users() { return $this-&gt;belongsToMany('User'); } } // Users conversations $conversations = User::find(1)-&gt;conversations; foreach($conversations as $conversation) { // All members of conversation $members = $conversation-&gt;users; // All messages of conversation $messages = $conversation-&gt;messages; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload