Laravel - Хранение / выборка данных для текущего зарегистрированного пользователя - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь сохранить и извлечь данные для текущего зарегистрированного пользователя в laravel, но не получаю ничего, кроме ошибок

[

Отсутствуют необходимые параметры для [Route: authlyrics. показать] [URI: painel / authlyrics / {authlyric}]. (View: / var / www/html/allup_lyrics_cms/resources/views/admin/userlyrics/index.blade.php)

]

Я имею в виду, что у меня есть две таблицы. Одна - это таблица пользователей, в которой хранятся данные для входа в систему, а другая таблица - это таблица песен, в которой хранятся слова песен, которые пользователь добавит на сайт. Как я могу сохранить эту аутентифицированную пользовательскую лирику и получить ее, чтобы вывести ее на главную страницу? в то время как текст и пользователи связаны через внешний ключ user_id. Мой код приведен здесь:

**

Список песен - admin> userlyrics> index.blade. php / edit.blade. php / create.blade. php / show.blade. php

**

@extends('adminlte::page')

@section('title', 'Minha Lista de Músicas')

@section('content_header')
<h1>Minha Lista de Músicas
<a href="{{ route('authlyrics.create') }}" class="btn btn-sm btn-success ml-3 text-uppercase">Adicionar nova
    música</a>
</h1>
@endsection

@section('content')

<div class="card">
<div class="card-body">
    <table class="table table-hover">
        <thead>
            <tr>
                <th width="50">ID</th>
                <th>Artista</th>
                <th>Título</th>
                <th>Extra Info</th>
                <th>URL da Música</th>
                <th width="200">Ações</th>
            </tr>
        </thead>

        <tbody>
            @foreach ($lyrics as $lyric)
            <tr>
                <td>{{ $lyric->id }}</td>
                <td>Nome do Artista</td>
                <td>{{ $lyric->title }}</td>
                <td>{{ $lyric->info }}</td>
                <td>{{ $lyric->video_url }}</td>
                <td>
                    <a href="{{ route('authlyrics.show', ['lyric' => $lyric->id]) }}" target="_blank"
                        class="btn btn-sm btn-success">Ver</a>

                    <a href="{{ route('authlyrics.edit', ['lyric' => $lyric->id]) }}"
                        class="btn btn-sm btn-info">Editar</a>

                    <form action="{{ route('authlyrics.destroy', ['lyric' => $lyric->id]) }}" method="POST"
                        class="d-inline" onsubmit="return confirm('Tem certeza que deseja excluir este usuário?')">
                        @method('DELETE')
                        @csrf
                        <input type="submit" value="Excluir" class="btn btn-sm btn-danger">
                    </form>
                </td>
            </tr>
            @endforeach
        </tbody>
    </table>
</div>
</div>
{{ $lyrics->links() }}
@endsection

**

Route - web. php

**

/* Lyrics Routing for Auth'd User */
Route::resource('/authlyrics', 'Admin\LyricIdController');

**

Лири c Модель - Лири c. php

**

class Lyric extends Model
{
protected $guarded = ['id', 'created_at', 'updated_at'];
protected $fillable = ['user_id', 'singer_id','title', 'info', 'video_url', 'lyric'];

public function singer()
{
    return $this->belongsTo(Singer::class)->withTimestamps();
}

public function user()
{
    return $this->belongsTo(User::class);
}
}

Пользователь Модель - Пользователь. php

public function lyrics()
{
    return $this->hasMany(Lyric::class);
}

**

Lyri c Контроллер - LyricIdController

**

class LyricIdController extends Controller
{
public function __construct(){
    $this->middleware('auth');
}

/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */

public function index()
{
    $user_id = Auth::user()->id;

    $lyrics = Lyric::where('user_id','=',$user_id)->orderBy('lyric', 'ASC')->paginate('10');

    return view('admin.userlyrics.index', [
        'lyrics' => $lyrics,
    ]); 
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
    return view('admin.userlyrics.create');
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    $data = $request->only([
        'title',
        // 'artist',
        'info',
        'video_url',
        'lyric'
    ]);

    $data['slug'] = Str::slug($data['title'], '-');
    $data['user_id'] = Auth::user()->id;

    $validator = Validator::make($data, [
        'title' => ['required', 'string', 'max:100'],
        'slug' => ['required', 'string', 'max:100', 'unique:lyrics'],
        // 'artist' => ['required', 'string', 'max:200'],
        'info' => ['string', 'max:100'],
        'video_url' => ['required', 'string', 'max:100', 'unique:lyrics'],
        'lyric' => ['required', 'string'],
    ]);

    if ($validator->fails()) {
        return redirect()->route('authlyrics.create')
            ->withErrors($validator)
            ->withInput();
    }

    // $artist = new Singer;
    // $artist->artist = $data['artist'];
    // $artist->save();

    $lyric = new Lyric;
    $lyric->user_id = $data['user_id'];
    $lyric->title = trim($data['title']);
    $lyric->slug = $data['slug'];
    $lyric->info = $data['info'];
    $lyric->video_url = $data['video_url'];
    $lyric->lyric = $data['lyric'];
    $lyric->save();

    Session::flash('message', 'Música adicionada com sucesso!');
    return redirect()->route('authlyrics.index');
}

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{
    $lyric = Lyric::find($id);

    return view('admin.userlyrics.show', [
        'lyric' => $lyric
    ]);
}

/**
 * Show the form for editing the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function edit($id)
{
    $lyric = Lyric::find($id);

    if ($lyric) {
        return view('admin.userlyrics.edit', [
            'lyric' => $lyric
        ]);
    }

    return redirect()->route('authlyrics.index');
}

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, $id)
{
    $lyric = Lyric::find($id);

    if ($lyric) {
        $data = $request->only([
            'title',
            // 'artist',
            'info',
            'video_url',
            'lyric'
        ]);

        if ($lyric['title'] !== $data['title']) {
            $data['slug'] = Str::slug($data['title'], '-');

            $validator = Validator::make($data, [
                'title' => ['required', 'string', 'max:100'],
                'info' => ['string', 'max:100'],
                'video_url' => ['required', 'string', 'max:100', 'url'],
                'slug' => ['required', 'string', 'max:100', 'unique:lyrics'],
                'lyric' => ['string'],
            ]);
        } else {
            $validator = Validator::make($data, [
                'title' => ['required', 'string', 'max:100'],
                'info' => ['string', 'max:100'],
                'video_url' => ['required', 'string', 'max:100', 'url'],
                'lyric' => ['string'],
            ]);
        }

        if ($validator->fails()) {
            return redirect()->route('authlyrics.edit', [
                'lyric' => $id
            ])
                ->withErrors($validator)
                ->withInput();
        }

        $lyric->title = trim($data['title']);
        $lyric->info = $data['info'];
        $lyric->video_url = $data['video_url'];
        $lyric->lyric = $data['lyric'];

        if (!empty($data['slug'])) {
            $lyric->slug = $data['slug'];
        }

        $lyric->save();
    }

    Session::flash('message', 'Música alterada com sucesso!');
    return redirect()->route('authlyrics.index');
}

/**
 * Remove the specified resource from storage.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function destroy($id)
{
    $lyric = Lyric::find($id);
    $lyric->delete();

    Session::flash('message', 'Música excluída com sucesso!');
    return redirect()->route('authlyrics.index');
}
}

**

Миграция текстов песен

**

Schema::create('lyrics', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('user_id')->nullable();
        $table->string('video_url');
        $table->string('title');
        $table->string('info');
        $table->string('slug');
        $table->text('lyric');
        $table->timestamps();
        $table->engine = 'InnoDB';

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

Обе таблицы, тексты песен и пользователи связаны внешним ключом, но я не могу найти в магазине тексты, связывающие пользователя, а также тексты. Мне нужна какая-то помощь BIIIG, пожалуйста ...

1 Ответ

0 голосов
/ 18 апреля 2020

Пользователь. php

/**
 * The lyrics that belong to the user.
 *
 * @return BelongsToMany
 *
 */
public function lyrics()
{
    return $this->hasMany(Lyric::class);
}

Лири c. php

/**
 * The user that owns to the lyrics.
 *
 * @return BelongsTo
 *
 */
public function user()
{
    return $this->belongsTo(User::class);
}

После того, как вы Получив отношения, вы можете получить к тексту, как это:

$user = auth()->user();  // Get the authenticated user.
$user->lyrics;

или

$lyrics = auth()->user()->lyrics;

Чтобы передать их на ваш взгляд:

$lyrics = auth()->user()->lyrics;

return view('my.view', compact('lyrics');

Если вы При использовании привязки модели маршрута вы можете обновить show() метод:

public function show(Lyric $lyric)
{
    return view('admin.userlyrics.show', compact('lyric');
}

Ваш маршрут может выглядеть примерно так:

Route::get('lyrics/{lyric}', 'LyricController@show');

В любом случае вы всегда можете получить текущий пользователь с auth()->user(). Оттуда у вас должен быть доступ к отношениям. Надеюсь, это поможет!

ОБНОВЛЕНИЕ

Вот как может выглядеть ваш метод store. Возможно, вам придется немного подстроить его под свои нужды, но это должно помочь вам.

public function store(Request $request) {

    // Validate the request data.
    $attributes = $request->validate([
        'title' => 'required',
    ]);

    // Create a new Lyric instance and fill all of the fillable attributes.
    $lyric = new Lyric($attributes);

    // Populate anything that is not mass-assignable.
    $lyric->user_id = auth()->user()->id; // set things you want to be in control of.
    $lyric->slug = strtolower($request->title);  // example.

    ...

    $lyric->save();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...