当前位置: 首页 > 知识库问答 >
问题:

在boolean-Laravel上调用成员函数attach()

祁宾白
2023-03-14

函数attach()有问题。我已经创建了3个表。1表用于添加电影。表2适用于电影类别。3表是电影ID和类别ID的集合。多对多的组合。

当我想添加一个新的视频类别从表格这我有错误-

视频控制器。php-

<?php

namespace App\Http\Controllers;

use Request;
use App\Http\Requests\CreateVideoRequest;
use App\Video;
use App\Category;
use Auth;
use Session;

class VideoController extends Controller
{
    public function __construct(){
        $this->middleware('auth', ['except' => 'index']);
    }

    public function index(){
        $videos = Video::latest()->get();
        return view('videos.index')->with('videos', $videos);
    }

    public function show($id){
        $video = Video::find($id);  
        return view('videos.show')->with('video', $video);
    }

    public function create(){
        $categories = Category::pluck('name', 'id');
        return view('videos.create')->with('categories',$categories);
    }

    public function store(CreateVideoRequest $request){
        $video = new Video($request->all());
        //dd($request->all());
        Auth::user()->videos()->save($video);

        $categoryIds = $request->input('CategoryList');
        $video->categories()->attach($categoryIds);

        Session::flash('video_created', 'Added');

        return redirect('video');
    }

    public function edit($id){
        $video = Video::findOrFail($id);
        return view('videos.edit')->with('video', $video);
    }

    public function update($id, CreateVideoRequest $request){
        $video = Video::findOrFail($id);
        $video->update($request->all());
        return redirect('video');
    }
}

视频php模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Video extends Model
{   

    protected $fillable = [
        'title',
        'url',
        'description'
    ];

    public function user(){
        return $this->belongsTo('App\User');
    }

    public function categories(){
        return $this->belongsToMany('App\Video')->withTimestamps;
    }
}

类别php模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{

    protected $fillable = [ 'name' ];

    public function videos(){
        return $this->belongsToMany('App/Video')->withTimestamps;
    }
}

User.php模型(也许你需要一个User.php模型解决问题)

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

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

迁移-创建\u类别\u视频\u表。php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoryVideoTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('category_video', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('category_id');

            $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
            $table->unsignedBigInteger('video_id');

            $table->foreign('video_id')->references('id')->on('videos')->onDelete('cascade');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('category_video');
    }
}

迁移-创建类别表。php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}

移民-create_videos_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateVideosTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('videos', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');     
            $table->string('title');
            $table->string('url');
            $table->text('description');
            $table->timestamps();

            $table->foreign('user_id')->references('id')->on('users');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('videos');
    }
}

类型刀身php-Laravel集合中的简单表单

{!! Form::select('CategoryList', $categories, null, ['multiple' => 'multiple']) !!}

共有1个答案

邢洋
2023-03-14

对于pivot的时间戳,您可以调用“方法”withTimestamps()而不是名为withTimestamps的“属性”:

// Video
public function categories()
{
    return $this->belongsToMany(Category::class)->withTimestamps();
}

// Category
public function videos()
{
    return $this->belongsToMany(Video::class)->withTimestamps();
}
 类似资料:
  • 我想基本验证,如果用户是管理员,然后请求下一步,否则重定向到主页 User.php: 最后一个函数是 一个dmin.php(这是中间件): routes.php: 我得到以下错误: Admin.php第21行中的FatalErrorException: 调用null上的成员函数isAdmin() 我还添加了

  • 我想创建一个函数来检查数据库中是否已存在用户。该函数存储在名为 checks 的 php 文件中并且必须返回一个值。 我的数据库.php文件: 我在另一个名为 的 php 文件中调用 错误出现在这个句子上:$sth=$con- 我在< code>checks.php文件中试过: < li >将代码从< code>database.php移动到checks.php < li >设置< code >错

  • 问题内容: 我正在尝试在此准备好的语句中绑定变量,但我一直收到错误: 调用该函数,并将变量传递给它。当我更改函数以仅回显变量时,该变量会在页面上正常打印,但是如果我尝试在此处绑定它,则会收到错误。有人可以帮忙吗? 我知道函数没有完全写在这里,但这不应该是一个问题。我不明白为什么我会收到此错误。 问题答案: 正如错误消息所说,这似乎不是一个对象。尝试在您的prepare- call之后使用来调试它。

  • 我使用Laravel 8与Livewire。 我创建了这个来显示项目列表,用户也可以应用过滤器。在加载数据时,每页显示10条记录。然而,当我尝试单击下一页或特定的页码时,我得到错误调用成员函数链接()数组... 我也在使用存储库,它被注入了livewire组件。

  • 当我尝试使用facebook对用户进行身份验证时,我可以将数据存储到用户表中,但无法将数据创建到soical_帐户中。因此,在出现错误后,会出现“调用成员函数创建()on null”。谁能给我一个解决方案,说明我错在哪里。 在我的社会账户控制中,我有以下方法 在我的数据库迁移中,我有用户和social_accounts用户与social_accounts有一对多的关系。 用户表: Social_a

  • 问题内容: 此代码 出现错误 : 致命错误:在第42行的C:\ Users \ fel \ VertrigoServ \ www \ login \ validation.php中的非对象上调用成员函数prepare() 码: 可能的原因是什么? 另一个问题 是什么?抱歉,我是pdo的新手 问题答案: 未定义。您没有在函数内部声明它,也没有将其作为参数传递。 您需要将其传递(好),或在全局名称空间