【问题标题】:how do I call a variable in Laravel如何在 Laravel 中调用变量
【发布时间】:2021-09-11 22:24:21
【问题描述】:

我正在尝试从表中调用一个变量,但我收到一个错误“未定义的变量 $user”。我正在尝试让程序从表中显示用户的用户名。

我正在使用 2 个表,部落代表一个群体,一个用户代表......好吧......用户。 所以我试图通过显示某个“部落”的创建者来连接两者。

用户控制器:

<?php

namespace App\Http\Controllers;
Use App\Models\User;
use Illuminate\Http\Request;

class tribesController extends Controller
{
    public function index($user)
    {
        $user = User::findOrFail($user);
         
        return view('home',[
            'user'=>$user,
        ]);
    }
}

主页:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Dashboard') }}</div>

                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif

                    {{ $user->username }}
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

路由器:

<?php

use Illuminate\Support\Facades\Route;

/*


Route::get('/', function () {
    return view('welcome');
});
Route::get('/home', function () {
    return view('home');
});

Route::get('/playlist', function () {
    return view('playlist');
});

Route::get('/tribe', function () {
    return view('tribe');
});


Route::get('/edit', function () {
    return view('edit');
});

Auth::routes();

Route::get('/tribe/{user}', [App\Http\Controllers\TribesController::class, 'index'])->name('tribe.index');

数据库文件:

<?php

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

class CreateTribesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tribes', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->string('title');
            $table->string('genre');
            $table->string('filepath')->nullable();
            $table->timestamps();

            $table->index('user_id');
        });
    }

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

型号:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class tribe extends Model
{
    public function user(){
        return $this->belongsTo(User::class);
    }
    use HasFactory;
}

【问题讨论】:

  • 在你的控制器中,如果你在findOrFail语句之后dd($user),你会得到什么?如果null,则没有用户返回,这就是失败的原因。
  • 我在路由器中添加了这个:Route::get('/user', function () { dd($user); });然后运行:127.0.0.1:8000/user 同样的错误,但如果我运行 Route::get('/user', function () { return dd(Auth::user()->tribe->title); });
  • 我的意思是在$user = User::findOrFail($user); 行之后在您的控制器中运行它。这将准确地向您展示代码当时正在做什么。否则,我们倾向于假设查询当然会返回我们期望的结果。故障排除时始终尝试输出变量以查看其中存储的确切内容。
  • 我是这样运行的,它列出了有关用户的所有信息,如果我通过用户不存在的 id 执行此操作,它会返回 null,我认为应该这样做..
  • 实际上自己解决了,并没有真正解决,只是使用了错误的路径..实际上不明白它是如何工作的。无论如何谢谢你的帮助:)

标签: php laravel model-view-controller


【解决方案1】:

您将 url 参数视为一个对象,在您获得它之前它不能是一个对象。传入用户 id,然后在 ORM 中查询匹配该 id 的用户,然后您可以将其用作对象!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2018-06-19
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多