Значение NULL при попытке получить имя автора созданной подкатегории, используя отношения на Laravel - PullRequest
0 голосов
/ 15 сентября 2018

Я хочу напечатать, какой пользователь является автором подкатегории, но когда я делаю dd (). Я получаю значение NULL.


Модель пользователя:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use Notifiable;
    use HasRoles;

    /**
     * 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 mutated to dates.
     *
     * @var array
     */
    protected $dates = [
        'created_at',
        'updated_at'
    ];
}

Категория модели:

class Category extends Model
{
    public function subcategory()
    {
        return $this->hasMany(Subcategory::class);
    }
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

Модель подкатегории:

class Subcategory extends Model
{
    public function category()
    {
        return $this->belongsTo(Category::class);
    }
public function user()
    {
        return $this->belongsTo(User::class);
    }
}

Функция, в которой я хочу напечатать автора подкатегории.

public function show(Category $category)                                                    
{                                                                                   
    $subcategories = $category->subcategory->user->name;                                               
    dd($subcategory);                                                                 
    return view('subcategories', compact('subcategories '));
}    

Вывод DD: NULL также, когда я делаю dd($category) В «отношениях» я вижу свою «подкатегорию», но нигде нет отношения «пользователя». Пожалуйста, помогите: /

Миграция:

public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->text('description');
            $table->timestamps();
        });
    }
    public function up()
    {
        Schema::create('subcategories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('description')->nullable();
            $table->foreign('category_id')->references('id')->on('categories')
                ->onUpdate('cascade')->onDelete('cascade');
            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users')
                ->onUpdate('cascade')->onDelete('cascade');
            $table->timestamps();
        });
    }

Просьба:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ItemRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            //
        ];
    }
}

View

@foreach($subcategories as $subcategory)
 <li>{{$subcategory->user->name}}</li>
@endforeach

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Ваша модель Category определяет отношение как subcategories, но вы звоните $category->subcategory.Вместо этого вызовите отношение так, как вы его определили:

$subs = $category->subcategories;

Кроме того, поскольку отношение один ко многим, вам нужно будет пройтись по каждой подкатегории, чтобы получить пользователя.Пример:

$user_names = array();
foreach ($subs as $s) {
    $user_names[] = $s->user->name
}
dd($user_names);

Или получить n-ю подкатегорию и т. Д.:

public function show(Category $category)                                                    
{                                                                                   
    $subcategories = $category->subcategory;                                               
    dd($subcategories);

    return view('subcategories', compact('subcategories'));
}

Если вы по-прежнему не можете видеть отношение пользователя в каждой подкатегории, попробуйте это с помощью:

$subcategories = $category->subcategory()->with('user')->get();
0 голосов
/ 15 сентября 2018

подкатегория не имеет отношения user (), только категория имеет. Поэтому имя пользователя будет:

$category->user->name

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...