2016-09-26 3 views
0

У меня есть одна таблица с именем «файлы», которую я хотел бы содержать все мои файлы пользователей. Файлы могут быть загружены из разных представлений и должны быть связаны с разными таблицами: таблица вопросов, таблица ответов, таблица комментариев, таблица сообщений и т. Д. ... но все же все они будут связаны также с таблицей пользователей, таким образом я буду знать, кто является владельцем файла.Таблица файлов Laravel 5.3, связанная с несколькими таблицами

Пример: «пользователь задает вопрос и прикрепляет изображение, чтобы помочь другим пользователям легче понять вопрос».

Значения вопроса переходят в «questions_table», файл переходит в «files_table», а идентификатор пользователя также переходит в «files_table».

Вопрос есть! (извините за длинное введение): Должен ли я использовать сводную таблицу? или просто двойное отношение один-ко-многим от 1.'users_table 'к' files_table '& 2.from' question_table 'to' files_table '?

+0

Я бы предложил не имея '_table' в именах таблиц. Кроме того, представляете ли вы множество файлов, принадлежащих одной записи в другой таблице? Кроме того, хотите ли вы получить доступ к связанной записи (вопрос и т. Д.) Из файла или просто хотите перейти к файлу из связанной записи? – ollieread

+0

Это можно легко решить с помощью 1: n морфинга в вашей таблице файлов, учитывая, что файл может принадлежать только 1 цели (вопрос, ответ и т. Д.). Для владельца это всего лишь идентификатор создателя, который вы можете добавить в качестве столбца как для вопросов, так и для таблиц файлов. – Robert

+0

_table - это просто показать, что я говорю о таблице, а не о названии таблицы. и дело в том, что вопрос принадлежит пользователю, файл принадлежит к Вопросу, а также принадлежит Пользователю. –

ответ

1

Я думаю, что это идеальный вариант использования для Polymorphic Relationship.

Вот структура таблиц:

users 
- id 
- name 

questions 
- id 
- title 

files 
- id 
- user_id 
- filable_id 
- filable_type 

В files таблице вы можете увидеть filable_id поле, которое собирается ссылаться либо вопрос идентификатор, идентификатор ответа, комментарий ID. И filable_type, который собирается сообщить записи, какой объект связан с этим файлом.

class Question extends Model 
{ 
    /** 
    * Get all of the question's files. 
    */ 
    public function files() 
    { 
     return $this->morphMany('App\File', 'filable'); 
    } 
} 

class File extends Model 
{ 
    /** 
    * Get all of the owning filable models. 
    */ 
    public function filable() 
    { 
     return $this->morphTo(); 
    } 
} 

Я настоятельно рекомендую вам, чтобы узнать больше об этом типе отношений на Laravel Documentation

+0

Спасибо, друг, вот что я сделал. просто хочу убедиться, что я хорош :) –

Смежные вопросы