Laravel получает данные из внешнего ключа

У меня две таблицы, одна называется 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 пользователям разные представления. enter image description here

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

enter image description here

если «AssignSubmission submission_id -> ссылки на -> Submission id», то ваши отношения обратные! Таблица с внешним идентификатором belongsTo другая таблица. Итак, поскольку таблица AssignSubmissions имеет submission_id, AssignSubmissions принадлежит к Submissions.

BizzyBob 26.10.2018 06:30
1
1
4 975
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Если вы используете отношение laravel. Затем вы можете сделать это: (при условии, что ваша модель таблицы представления называется Submission

App\Submission::with('assignsubmission')->get();

В моем случае идентификатор представления - это внешний ключ AssignSubmissiom. $assignsubmissions = Submission::with('assignsubmission')->get(); Я не понял.

Donald Donald 26.10.2018 06:21
AssignSubmission имеет только один Submission?
Kapitan Teemo 26.10.2018 06:32
Ответ принят как подходящий

Если у вас уже есть объект Submission$submission,

$submission->assignSubmission->url предоставит вам URL-адрес.

Он преобразуется в camalCase для имени свойства.

если у меня в отправке 2 URL-адреса, мне нужны только 2-е данные, как я могу это отобразить?

Donald Donald 28.10.2018 13:17

Я предполагаю, что вы имеете в виду 2 URL-адреса в assignmentSubmission, если это так, вы можете просто рассматривать $submission->assignSubmission как обычный assignSubmission, что означает, однако, что вы можете получить доступ ко второму URL-адресу на обычном assignSubmission, например $assignSubmission->urls[1], вы можете сделать то же самое с $submission->assignSubmission, например $submission->assignSubmission->urls[1] . Теперь это зависит исключительно от вашей модели AssignSubmission, не связанного с отношениями с $submission.

Deyi Kong 29.10.2018 17:39

У меня вопрос, почему при получении данных таким способом иногда появляется ошибка «Попытка получить имя свойства не-объекта»

JuMa 17.02.2021 08:40

@JuMa Это потому, что объект перед "->" не является объектом, обычно он равен нулю. например, $submission->assignSubmission->url в этом случае отказ может быть результатом того, что $submission или $submission->assignSubmission являются нулевыми.

Deyi Kong 19.02.2021 00:58

Я думаю, ваши отношения могут быть обратными?

Подчинение:

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-адрес

Donald Donald 26.10.2018 06:45

@DonaldDonald Какой запрос вы сейчас пытаетесь выполнить?

Amol Rokade 26.10.2018 06:49

Я рассматриваю Submission, а AssignSubmissions - это ваши модели, поэтому вы можете получить что-то вроде $ submission = App \ Submission :: find (1) -> assignSubmissions; $ assignSubmissions = App \ AssignSubmissions :: find (1) -> отправка;

Amol Rokade 26.10.2018 06:50

Итак, в AssignSubmission у меня есть user_id и submission_id. Я хочу отображать URL-адрес файла в представлении.

Donald Donald 26.10.2018 06:52

Какой URL-адрес файла?

Amol Rokade 26.10.2018 06:55
url или file сохраняются в таблице Submission, которую вы можете видеть на картинке, которую я загружаю
Donald Donald 26.10.2018 06:56

Используйте цикл foreach, если у вас есть единственный результат для $ assignSubmissions. В противном случае вам нужно сделать цикл foreach для $ assignSubmissions, а затем foreach ($ assignSubmissions-> submission as $ assignSubmission) // и получить доступ, например, $ assignSubmission-> url this. конец

Amol Rokade 26.10.2018 07:09

Проверьте эту ссылку, чтобы получить более подробную информацию. laravel.com/docs/5.7/eloquent-relationships#one-to-many Надеюсь, ваша проблема решена. Если да, примите ответ.

Amol Rokade 26.10.2018 07:11

Позвольте нам продолжить обсуждение в чате.

Amol Rokade 26.10.2018 07:28

Вы должны попробовать это:

Модель представления

public function assignsubmission()
{
    return $this->hasMany('App\AssignSubmission');
}

Модель Назначить

public function submissions()
{
    return $this->belongsTo('App\Submission','submission_id');
}

Другие вопросы по теме