Как написать связь между двумя связанными моделями и присвоить значение, используя эту связь?Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как написать связь между двумя связанными моделями и присвоить значение, используя эту связь?

Сообщение Anonymous »

Поэтому в настоящее время я борюсь с функцией магазина моего AlbumController, где мне нужно сохранить альбом в моей таблице альбомов, включая индексы изображений, выбранных для включены в альбом, в который включенные изображения затем будут индексироваться с помощью внешнего ключа album_id в другой таблице, в которой хранятся изображения, называемые photos. Мне нужно, чтобы всем выбранным изображениям было присвоено значение вновь созданного альбома, которое является первичным ключом album_id в таблице моих альбомов, но я до сих пор не понял, как присвоить значение с помощью Красноречивые отношения.
Это моя функция магазина внутри моего контроллера AlbumController:

Код: Выделить всё

/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$user_id = Auth::id();
$data = [
'album_name' => $request->get('album_name'),
'album_description' => $request->get('album_description'),
'user_id' => $user_id // I still hasnt figured out how assign the user_id value to the album using Eloquent ORM relationships either
];
//album::create($data); // creates the album
$photos = ['photos' => $request->get('photo_checkbox')]; // insert photos checklisted in the create album form
foreach ($photos as $photo){
$album_query =  Photo::where('photo_id',$photo); // assign the photos checklisted album_id according to the album just created
$result = $album_query->albums()->save(); // tried to use Laravel's Eloquent ORM relationships
/** $album = Album::where('album_name',$data['album_name']);
* $result = $album_query->update(['album_id' => $album->album_id]); // alternative without Eloquent ORM relationships
*/
}
dd($result);
session()->now('data','album_name');
return redirect(route('album.album'))->with('success','album "'.$data['album_name'].' '.'" has been registered.');
}
Я определил свой альбом как экземпляр модели Album, внутри которого может содержаться множество фотографий:

Код: Выделить всё

class Album extends Model
{
use HasFactory;
protected $table = "albums";
protected $primaryKey = "album_id";
const CREATED_AT = 'data_created';
const UPDATED_AT = 'data_modified';

protected $fillable = [
'album_name',
'album_description',
'user_id'
];

public function photos() : HasMany {
return $this->hasMany(Photo::class,'album_id','album_id');
}
public function users() : BelongsTo {
return $this->belongsTo(GalleryUser::class,'user_id','gallery_user_id');
}
}
хотя мои фотографии являются экземплярами модели Photo:

Код: Выделить всё

class Photo extends Model
{
/** @use HasFactory */
use HasFactory;
protected $table = "photos";
protected $primaryKey = "photo_id";
const CREATED_AT = 'data_created';
const UPDATED_AT = 'data_modified';

protected $fillable = [
'photo_title',
'photo_description',
'photo_location',
'user_id',
'album_id'
];
public function comments() : HasMany {
return $this->hasMany(PhotoComment::class,'comment_id','comment_id');
}
public function albums() : BelongsTo {
return $this->belongsTo(Album::class,'album_id','album_id');
}
public function users() : BelongsTo {
return $this->belongsTo(GalleryUser::class,'user_id','gallery_user_id');
}
}
в этом фрагменте функции моего магазина моего контроллера AlbumController я написал два разных параметра для присвоения значения внешнему ключу album_id, один с красноречивыми связями, другой без:

Код: Выделить всё

...
foreach ($photos as $photo){
$album_query =  Photo::where('photo_id',$photo); // assign the photos checklisted album_id according to the album just created
$result = $album_query->albums()->save(); // tried to use Laravel's Eloquent ORM relationships
/** $album = Album::where('album_name',$data['album_name']);
* $result = $album_query->update(['album_id' => $album->album_id]); // alternative without Eloquent ORM relationships
*/
}
...
но когда я попытался выполнить $album_query->albums()->save(), вместо этого я получил вызов неопределенного метода Illuminate\Database\Eloquent\Builder:: альбомы(). Я попытался добавить ->get() в $album_query, но вместо этого получил метод Illuminate\Database\Eloquent\Collection::albums.. Исходя из этого, я чувствую, что, возможно, неправильно написал взаимосвязь, и есть способ, которым код может работать, если я смогу выяснить взаимосвязь между моей моделью альбома и моей моделью Photo.
Между тем, альтернатива тоже выглядит не очень хорошо, хотя я думаю, что это достаточно правдоподобный код, я чувствую, что красноречивый ORM не используется очень часто, и я мог бы с таким же успехом не использовать его если это так.

Подробнее здесь: https://stackoverflow.com/questions/790 ... value-usin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»