Php 在Laravel项目的数据库中插入和更新主视频时出现问题

Php 在Laravel项目的数据库中插入和更新主视频时出现问题,php,laravel,Php,Laravel,我正在为拉威尔的广告/房地产项目工作。我有多个视频库为每个单独的广告。我想能够选择其中一个视频单选按钮,使其成为该广告的主要视频(显示该特定视频旁边的广告)。我在属性和视频之间有很多关系,我试图将视频的id从videos表插入属性表的main_video_id列,并且在我将当前视频更改为新视频以相应地更新外键时插入。我无法在控制器中写入该方法。感谢您的帮助。这是我的表格和代码 properties (id, title, location, price, main_video_id) vide

我正在为拉威尔的广告/房地产项目工作。我有多个视频库为每个单独的广告。我想能够选择其中一个视频单选按钮,使其成为该广告的主要视频(显示该特定视频旁边的广告)。我在属性和视频之间有很多关系,我试图将视频的id从videos表插入属性表的main_video_id列,并且在我将当前视频更改为新视频以相应地更新外键时插入。我无法在控制器中写入该方法。感谢您的帮助。这是我的表格和代码

properties (id, title, location, price, main_video_id)

videos (id, filename_video, model_id)
在视频表中,model_id列是连接到属性表的外键

PropertyController.php

public function edit(Property $property, Request $request)
{
    if (!($property->user_id == Auth::user()->id)) {
        abort(404);
    }

    $category = $property->category;

    foreach ($property->photos as $value) {
        $photoarray[] = $value->filename;
    };

    empty($photoarray) ? $photo = '' : $photo = implode(",", $photoarray);

    foreach ($property->videos as $value1) {
        $videoArray[] = $value1->filename_video;
    };

    empty($videoArray) ? $video = '' : $video = implode(",", $videoArray);


    $data = .... Here I am having trouble writing method!


    return view('property.edit', compact(
        'category',
        'photo',
        'property',
        'video', 
        'data'
    ));
}
edit.blade.php

<form id="form" action="/property/{{$property->id}}" method="POST" enctype="multipart/form-data">
<input type="hidden" id="hideninput" data-src="property/{{$property->id}}/gallery"value="{{old('video',$video)}}" name="video">
    @if (old('video', $video))
    @foreach (array_filter(explode(',',old('video', $video)), 'strlen') as $key =>$value)
        <div id="{{'div_video_'.$key}}" class="col-md-3" style="padding: 15px;">

            @foreach ($data as $key => $value)
                <input type="radio" name="radio" value="{{ $value->video_id }}">Make main
            @endforeach

            <button data="{{$key}}" type="button" class="closebuttonvideo">
                <span aria-hidden="true">&times;</span>
            </button>
            <video id="{{'video_'.$key}}" data={{$value}} src="/storage/property/{{$property->id}}/gallery/{{$value}}" class="video-js vjs-default-skin" controls preload="auto" data-setup='{"inactivityTimeout": 0}' width="180" height="180">
            </video>
        </div>
    @endforeach
    @endif
Video.php

public function properties()
{
    return $this->belongsTo(Property::class);
}

properties
表中没有
main\u video\u id
,而是采用以下方法:

将列
is\u main\u video
添加到
videos
表中,并添加一个复合唯一约束,如下所示:

$table->boolean('is_main_video')->nullable()->默认值(null);
$table->unique(['model_id','is_main_video']);
唯一约束确保单个属性没有多个主视频

Property.php中

protected$appends=['mainVideo'];
公共活动视频()
{
返回$this->hasMany(视频::class,“model_id”);
}
公共函数getMainVideoAttribute()
{
返回$this->videos->first(函数($video){
return$video->is\u main\u vide;
});
}
现在,当您获取
属性
时,您将自动获取
main视频
和相关视频,结果如下所示:

array:4 [
  "id" => 1
  "name" => "property 1"
  "mainVideo" => array:4 [
    "id" => 2
    "model_id" => 1
    "is_main_video" => 1
    "name" => "Video 2"
  ]
  "videos" => array:2 [
    0 => array:4 [
      "id" => 1
      "model_id" => 1
      "is_main_video" => null
      "name" => "Video 1"
    ]
    1 => array:4 [
      "id" => 2
      "model_id" => 1
      "is_main_video" => 1
      "name" => "Video 2"
    ]
  ]
]


希望有帮助

您必须在数据字段中设置请求的id,如下所示:
$data=request->input('radio')
,然后您将在var中有一个请求的默认视频
id
,并使用此id更新模型,返回刷新视图。@SergheiLeonenco我明白了,就是无法将其写入代码。你能帮我吗?在我的视图和控制器中,我现在应该如何处理?它是否有用@Marko?用不同的方法解决了它。不过还是要谢谢你:)
array:4 [
  "id" => 1
  "name" => "property 1"
  "mainVideo" => array:4 [
    "id" => 2
    "model_id" => 1
    "is_main_video" => 1
    "name" => "Video 2"
  ]
  "videos" => array:2 [
    0 => array:4 [
      "id" => 1
      "model_id" => 1
      "is_main_video" => null
      "name" => "Video 1"
    ]
    1 => array:4 [
      "id" => 2
      "model_id" => 1
      "is_main_video" => 1
      "name" => "Video 2"
    ]
  ]
]