首页 > 解决方案 > Laravel 5.7 雄辩

问题描述

所以,我在从 Laravel 的数据库中获取一些信息时遇到了一些问题。问题是,我想要一个站点设置表,其中包含一些全局默认值。

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| option_name  | varchar(255) | NO   |     | NULL    |                |
| option_value | longtext     | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

像这样..如何使用 Laravel Eloquent 获取所有信息?

select * from `options`;
> 1 | site_name | mysite.com

我希望能够做到

$options->site_name

在我的控制器和视图中。不记得这种东西叫什么,所以我真的找不到它.. :(

编辑:

请求后的模型类

namespace App;

use Illuminate\Database\Eloquent\Model;

class DNBOptions extends Model
{
    protected $table = 'dnb_options';
    protected $primaryKey = 'option_name';

    protected $fillable = [
        'option_name', 'option_value'
    ];
}

编辑2:

在 Laracast 上得到答案以使用 ->pluck() 并转换为 (object) 以获得我正在寻找的结果。

$option->site_name

链接到 Laracast

标签: phplaraveleloquent

解决方案


首先创建模型。您可以手动或artisan在终端中执行此操作:

php artisan make:model Option

这将创建App\Option类。然后在中配置模型app/Option.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Option extends Model
{
    //
    protected $table = 'options';
}

现在在任何控制器中App\Http\Controllers\AnyController都可以使用代码:

use App\Option;

// Other codes ...

public function show($id) {
    $option = Option::find($id);
    echo $option->option_name; // print "site_name"
}

OP 后编辑给新模型 -------------

因此,如果您使用模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class DNBOptions extends Model
{
    protected $table = 'dnb_options';
    protected $primaryKey = 'option_name';

    protected $fillable = [
        'option_name', 'option_value'
    ];
}

然后在控制器或视图中使用:

$option = \App\DNBOptions::find('site_name');
echo $option->option_value;

// Get all
$options = \App\DNBOptions::all();
foreach($options as $option) {
    echo $option->option_name;
    echo $option->option_value;
}

// Print 1st
echo $options->first()->option_name;

// With where
$option = \App\DNBOptions::where('option_name', 'site_name')->first();
echo $option->option_value;

一个完整的控制器 - 查看示例:

<?php

namespace App\Http\Controllers;

use App\DNBOptions;

class OptionController extends Controller
{
    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $options = DNBOptions::all();
        $data ['options'] => $options;
        return view('options.index', $data);
    }
}

视图类是resources/views/options/index.blade.php

@extends('layouts.app')

@foreach($options as $option)
     {{ $option->site_name }}
     {{ $option->option_value }}
@endforeach

@extends如果您有布局模板,请使用。并查看 Laravel 文档以获取更多信息。


推荐阅读