У меня две таблицы, одна называется Submission, другая - AssignSubmission.
Submission принадлежат к AssignSubmission
public function assignsubmission()
{
return $this->belongsTo('App\AssignSubmission');
}
AssignSubmission имеет много Submission
public function submissions()
{
return $this->hasMany('App\Submission');
}
Они связаны с внешними ключами
В AssignSubmission есть id, user_id и submission_id, внешний ключ - это submission_id.
В таблице отправки указаны id, user_id и file, url и т. д.
в AssignSubmissionsubmission_id -> ссылки на -> Submissionid.
Я назначил 2 пользователям разные представления.

Как я могу получить данные из внешнего ключа? Я хочу отобразить URL-адрес или файл в представлении






Если вы используете отношение laravel. Затем вы можете сделать это: (при условии, что ваша модель таблицы представления называется Submission
App\Submission::with('assignsubmission')->get();
В моем случае идентификатор представления - это внешний ключ AssignSubmissiom. $assignsubmissions = Submission::with('assignsubmission')->get(); Я не понял.
AssignSubmission имеет только один Submission?
Если у вас уже есть объект Submission$submission,
$submission->assignSubmission->url предоставит вам URL-адрес.
Он преобразуется в camalCase для имени свойства.
если у меня в отправке 2 URL-адреса, мне нужны только 2-е данные, как я могу это отобразить?
Я предполагаю, что вы имеете в виду 2 URL-адреса в assignmentSubmission, если это так, вы можете просто рассматривать $submission->assignSubmission как обычный assignSubmission, что означает, однако, что вы можете получить доступ ко второму URL-адресу на обычном assignSubmission, например $assignSubmission->urls[1], вы можете сделать то же самое с $submission->assignSubmission, например $submission->assignSubmission->urls[1] . Теперь это зависит исключительно от вашей модели AssignSubmission, не связанного с отношениями с $submission.
У меня вопрос, почему при получении данных таким способом иногда появляется ошибка «Попытка получить имя свойства не-объекта»
@JuMa Это потому, что объект перед "->" не является объектом, обычно он равен нулю. например, $submission->assignSubmission->url в этом случае отказ может быть результатом того, что $submission или $submission->assignSubmission являются нулевыми.
Я думаю, ваши отношения могут быть обратными?
Подчинение:
public function assignSubmissions()
{
return $this->hasMany(AssignSubmission::class);
}
Назначить
public function submission()
{
return $this->belongsTo(Submission::class);
}
Вы написали неправильные отношения, должно быть так Подчинение:
public function assignSubmissions()
{
return $this->hasMany('App\Submission');
}
Назначить
public function submission()
{
return $this->belongsTo('App\AssignSubmission');
}
Чтобы получить результаты, я считаю, что Submission и AssignSubmissions - это ваши модели, поэтому вы можете получить, например,
$submission = App\Submission::find(1)->assignSubmissions;
$assignSubmissions = App\AssignSubmissions::find(1)->submission;
Проверьте эту ссылку для получения дополнительной информации https://laravel.com/docs/5.7/eloquent-relationships#one-to-many
Теперь я переписал отношения, что дальше, как я получаю данные из внешнего ключа и отображаю URL-адрес
@DonaldDonald Какой запрос вы сейчас пытаетесь выполнить?
Я рассматриваю Submission, а AssignSubmissions - это ваши модели, поэтому вы можете получить что-то вроде $ submission = App \ Submission :: find (1) -> assignSubmissions; $ assignSubmissions = App \ AssignSubmissions :: find (1) -> отправка;
Итак, в AssignSubmission у меня есть user_id и submission_id. Я хочу отображать URL-адрес файла в представлении.
Какой URL-адрес файла?
url или file сохраняются в таблице Submission, которую вы можете видеть на картинке, которую я загружаю
Используйте цикл foreach, если у вас есть единственный результат для $ assignSubmissions. В противном случае вам нужно сделать цикл foreach для $ assignSubmissions, а затем foreach ($ assignSubmissions-> submission as $ assignSubmission) // и получить доступ, например, $ assignSubmission-> url this. конец
Проверьте эту ссылку, чтобы получить более подробную информацию. laravel.com/docs/5.7/eloquent-relationships#one-to-many Надеюсь, ваша проблема решена. Если да, примите ответ.
Позвольте нам продолжить обсуждение в чате.
Вы должны попробовать это:
Модель представления
public function assignsubmission()
{
return $this->hasMany('App\AssignSubmission');
}
Модель Назначить
public function submissions()
{
return $this->belongsTo('App\Submission','submission_id');
}
если «AssignSubmission submission_id -> ссылки на -> Submission id», то ваши отношения обратные! Таблица с внешним идентификатором
belongsToдругая таблица. Итак, поскольку таблицаAssignSubmissionsимеетsubmission_id,AssignSubmissionsпринадлежит кSubmissions.