php - Laravel - 显示名称而不是 id

标签 php laravel foreach laravel-blade laravel-models

我正在尝试编写一些代码,以在 Laravel 中显示数据库中的数据。但是我有两个表值通过外键相互链接,当我尝试在我的页面上显示时,它只显示 id 而不是实际名称。我在另一个 stackoverflow 问题中看到你应该在你的模型中定义表数据值,但这不起作用或者我做错了。 有人可以帮我解决这个问题吗? :)

模型 Planet.php:

<?php

namespace App\Models;

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

class Planet extends Model
{
    public function solar()
    {
    return $this->belongsTo(SolarSystems::class, 'id');
    }
}

模型 SolarSystems.php:

<?php

namespace App\Models;

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

class SolarSystems extends Model
{
    public function planet()
    {
        return $this->belongsTo(Planet::class, 'solar_systems_id');
    }
}

星球 Controller .php:

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Planet;
use App\Models\SolarSystems;

class PlanetController extends Controller
{
    public function index()
    {
        $planets = Planet::all();
        $solar = SolarSystems::all();

        return view('welcome', ['planets'=>$planets]);
    }
    public function show($planeet)
    {
        $planets = Planet::all();
        $solar = SolarSystems::all();
    
        $planets = collect($planets)->where('name', $planeet);
        return view('welcome', ['planets' => $planets]);
    }
}

欢迎.blade.php:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Laravel</title>
        <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap" rel="stylesheet">
        <style>
            body {
                font-family: 'Nunito', sans-serif;
            }
        </style>
    </head>
    <body>

@foreach ($planets as $planeten)
    <ul>
        <li>{{ ucfirst($planeten->name) }}</li>
        <p>{{ ucfirst($planeten->description) }}</p>
        <p>{{ ucfirst($planeten->solar_systems_id) }}
    </ul>
@endforeach
    </body>
</html>

导入.sql:

CREATE DATABASE laravel;
USE laravel;
CREATE TABLE planets (
    id int(11) AUTO_INCREMENT,
    name text,
    description text,
    size_in_km int(11),
    solar_systems_id int(11),
    PRIMARY KEY (id)
);

CREATE TABLE solar_systems (
    id int(11) AUTO_INCREMENT,
    name text,
    age_in_years int(11),
    PRIMARY KEY (id)
);

INSERT INTO planets (name, description, size_in_km, solar_systems_id)
VALUES ('mars', 'Mars is the fourth planet from the Sun and the second-smallest planet in the Solar System, being larger than only Mercury.', 3389, 1);

INSERT INTO planets (name, description, size_in_km, solar_systems_id)
VALUES ('venus', 'Venus is the second planet from the Sun. It is named after the Roman goddess of love and beauty.', 6051, 1);

INSERT INTO planets (name, description, size_in_km, solar_systems_id)
VALUES ('earth', 'Our home planet is the third planet from the Sun, and the only place we know of so far thats inhabited by living things.', 6371, 1);

INSERT INTO solar_systems (name, age_in_years)
VALUES ('The Milky Way', 1360000000);

这就是我现在得到的,但它需要说的不是“1”:“银河系” enter image description here

最佳答案

您的代码几乎没有问题;

关系

你有 1-N 关系,一个行星属于一个太阳系,一个太阳系有许多行星。

星球.php

public function solar()
{
    return $this->belongsTo(SolarSystems::class, 'solar_systems_id');
}

SolarSystems.php

public function planets()
{
    return $this->hasMany(Planet::class, 'solar_systems_id');
}

Controller

PlanetController.php

public function show($planeet)
{
    $planets = Planet
              ::with('solar')
              ->where('name', $planeet)
              ->get();
       
    return view('welcome', ['planets' => $planets]);
}

你看到了吗,我正在使用 withwhere 来优化查询。

查看

由于您已经使用预加载加载了关系,因此您可以直接从星球访问模型。

 <p>{{ ucfirst($planeten->solar->name) }}

关于php - Laravel - 显示名称而不是 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70862711/

相关文章:

php - 如何使用 php 获取 FFMPEG -progress url 数据

php - Kohana Auth 模块无法登录

php - 如何生成帖子的 Content-Md5 header 并将请求放入 php

javascript - 在 JQuery foreach 上得到不同的答案

php - Woocommerce wp_query 按 ID 获取订单

php - 如何从 ajax 更改 css 值

php - Laravel 未在日期时间字段上保存时区偏移量

php - Elasticsearch 不会将 not_analyzed 应用到我的映射中

php - 我怎样才能避免 laravel(php) 中的嵌套查询?

php - 如何将 foreach 循环分配给变量?