Ваша проблема здесь заключается в вашей модели данных.
Я считаю, что здесь полезно изложить мою проблему в Engli sh, и это часто может решить, как объекты базы данных связаны друг с другом. Давайте начнем с этой проблемы и сведем ее к утверждению.
Ваши пользователи, я полагаю, не ограничатся размещением одного изображения в течение всего срока действия своей учетной записи. Поэтому мы хотим, чтобы пользователи могли добавлять столько изображений, сколько им нравится. Это становится утверждением:
Я хочу, чтобы мои пользователи имели много изображений .
Теперь мы могли бы получить столбец в таблице user для каждого изображения, которое может иметь пользователь. Но тогда у нас быстро заканчивались столбцы, и нам приходилось постоянно менять наши запросы, чтобы учесть это. Это означает, что нам нужно хранить изображения отдельно, чтобы мы могли иметь столько, сколько нам нужно, и, следовательно, означает, что другая таблица будет содержать изображение. Но как мы узнаем, кому принадлежит изображение?
Я хочу, чтобы мои изображений принадлежали одному пользователю .
Из этих двух утверждений мы знаем, что пользователь не ограничен в изображениях, которые у него есть, и что любое изображение должно принадлежать пользователю (или сообщение, мы рассмотрим это позже).
users
=======
id
name
images
=======
id
name
user_id
проблема, с которой мы сталкиваемся, заключается в том, что это нарушает ваше следующее утверждение, что изображение может принадлежать пользователю, сообщению или обоим. Но мы можем свести это к утверждению:
Изображение может принадлежать пользователю или посту, или, возможно, обоим .
Отсюда нам нужен способ сообщить изображению: «у вас нет пользователя или нет сообщения». Здесь мы вводим пустые поля в таблицу изображений.
users
=======
id
name
posts
=======
id
name
images
=======
id
name
user_id nullable
post_id nullable
Теперь отсюда вы начинаете задавать вопросы о получении этих данных. Мы знаем следующее:
- Пользователь может иметь много изображений
- сообщение может иметь много изображений
- Изображение может принадлежать пользователю, а также принадлежать сообщению
Обратите внимание на мой дурацкий акцент. Это намекает вам на отношения, которые вы, возможно, захотите на своих моделях.
class User {
public function images() {
return $this->hasMany('Image');
}
}
class Post {
public function images() {
return $this->hasMany('Image');
}
}
class Image {
public function user() {
return $this->belongsTo('User');
}
public function post() {
return $this->belongsTo('Post');
}
}
Надеюсь, это поможет прояснить ситуацию!