代码之家  ›  专栏  ›  技术社区  ›  chagou2704

此集合实例上不存在属性[libelle-metier]

  •  0
  • chagou2704  · 技术社区  · 6 年前

    我有一个显示select id‘technicien’的函数,他显示了表用户的名字,还有‘metier’。 技术表

    Schema::create('techniciens', function (Blueprint $table) {
        $table->increments('id');
        $table->boolean('actif')->default(1);
        $table->float('moyenne_avis')->nullable();
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->datetime('deleted_at')->nullable();
        $table->timestamps();
    
    });
    

    梅蒂埃表

    Schema::create('metiers', function (Blueprint $table) {
            $table->increments('id');
            $table->string('libelle_metier');
            $table->datetime('deleted_at')->nullable();
            $table->timestamps();
        });
    

    用户表

    Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('email');
            $table->string('password');
            $table->string('nom');
            $table->string('prenom');
            $table->string('tel');
            $table->string('mobil');
            $table->boolean('role')->default(0);
            $table->datetime('deleted_at')->nullable();
            $table->rememberToken();
            $table->timestamps();
        });
    

    技术模型

    public function  user()
    {
        return $this->belongsTo(User::class);
    }
    
    public function metier()
    {
        return $this->belongsToMany('App\metier','technicien_metier', 
        'technicien_id','metier_id');
    
    }
    

    梅蒂埃模型

     public function techniciens()
    {
        return $this->belongsToMany('App\technicien','technicien_metier', 
        'metier_id','technicien_id');
    
    }
    

    我的技术控制器有这个功能

     public function GetTables($id)
    {
        $technicien = Technicien::with('user','metier')->find($id);
        $metier = $technicien->metier;
        return [
                'id' => $technicien->id,
                'actif' => $technicien->actif,
                'nom' => $technicien->user->nom,
                'prenom' => $technicien->user->prenom,
                'metier' => $metier->libelle_metier,
        ];
    }
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Davit Zeynalyan    6 年前

    梅蒂埃关系是多对多技术模型。先更正你的关系名

    public function metiers()
    {
        return $this->belongsToMany('App\metier','technicien_metier', 
        'technicien_id','metier_id');
    }
    

    然后

    public function GetTables($id)
    {
        $technicien = Technicien::with('user','metiers')->find($id);
        $metiers = $technicien->metiers;
        return [
            'id' => $technicien->id,
            'actif' => $technicien->actif,
            'nom' => $technicien->user->nom,
            'prenom' => $technicien->user->prenom,
            'metier' => $metiers->pluck('libelle_metier')->all(),
            // or 'metier' => !empty($metiers->first()) ? $metiers->first()->libelle_metier : 'no metier';
        ];
    }
    
        2
  •  3
  •   rkj    6 年前

    在这里 $metier 是集合实例,可以使用foreach循环它,也可以使用collection方法获取值 first pluck 这样地

    public function GetTables($id)
    {
        $technicien = Technicien::with('user','metier')->find($id);
        $metier = $technicien->metier;
        return [
                'id' => $technicien->id,
                'actif' => $technicien->actif,
                'nom' => $technicien->user->nom,
                'prenom' => $technicien->user->prenom,
                'metier' => $metier->first()->libelle_metier,
        ];
    }
    

    public function GetTables($id)
    {
        $technicien = Technicien::with('user','metier')->find($id);
        $metier = $technicien->metier;
        return [
                'id' => $technicien->id,
                'actif' => $technicien->actif,
                'nom' => $technicien->user->nom,
                'prenom' => $technicien->user->prenom,
                'metier' => $metier->pluck('libelle_metier')->all(), //it will give you an array
        ];
    }
    

    收集详细信息 https://laravel.com/docs/5.6/collections#method-pluck

        3
  •  1
  •   Leo    6 年前

    显然,我们的关系返回空值 $metier = $technicien->metier; 因为没有关系,所以你可以这样做:

     public function GetTables($id)
    {
        $technicien = Technicien::with('user','metier')->find($id);
        $metier = $technicien->metier;
        return [
                'id' => $technicien->id,
                'actif' => $technicien->actif,
                'nom' => $technicien->user->nom,
                'prenom' => $technicien->user->prenom,
                'metier' => isset($metier->libelle_metier) ? $metier->get()->pluck('libelle_metier') : null,
        ];
    }
    

    或者调整您的查询以仅获取具有以下特征的技术人员:

    $technicien = Technicien::whereHas('user','metier')->find($id);