mysql如何查找从类别值不同表中的类别名称 Laravel 4.2 吗?

标签: MySQL PHP laravel
发布时间: 2017/4/9 23:51:51
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

有两个表类别和内容。 内容表中有 id,category_id

类别表具有类别名称和 id

我要从内容表与类别名称类别表中获取所有内容。

我不想使用联接。

请建议我使用其他查询。

控制器

     $AllContent=Content::all();

    return View::make('ALL/Contents')->with('AllContent',$AllContent); 

解决方法 1:

我也不的知道为什么你不想要使用 SQL JOIN,因为它几乎可以肯定是最有效的事,当你有一个表有关的另一种由其主键。但是,嘿,我判断是谁?

你可以这样做的方法是使用一个子查询。在纯老 SQL:

SELECT
    `content`.`id`,
    (
        SELECT `name`
        FROM `category`
        WHERE `id` = `content`.`category_id`
    ) AS `name`
FROM `content`

所以,为此使用 Laravel 的查询生成器︰

DB::table('content')
    ->select(['id'])
    ->selectSub(function ($query) {
        return $query->from('category')
                     ->where('id', '=', DB::raw('content.category_id'))
                     ->select('name')
    }, 'name')
    ->get();

我觉得,你想要的不管怎么说。但是,真的,只是使用一个联接。


如果想要使用一个联接你你就好一点。再一次我会给你的原始 SQL 首先︰

SELECT
    `content`.`id`,
    `category`.`name`
FROM `content`
LEFT JOIN `category`
    ON `content`.`category_id` = `category`.`id`

和现在在 Laravel 的查询生成器中︰

DB::table('content')
    ->join('category', 'content.category_id', '=', 'category.id')
    ->select(['content.id', 'category.name'])
    ->get();

现在用 Eloquent 模型︰

// app/Models/Content.php
namespace App\Models;

class Content
{
    protected $table = 'content';

    public function category()
    {
        return $this->belongsTo('App\Models\Category', 'category_id');
    }
}


// app/Models/category.php
namespace App\Models;

class Category
{
    protected $table = 'category';

    public function content()
    {
        return $this->hasMany('App\Models\Content', 'category_id');
    }
}

现在你可以使用这种模式做各种各样。例如,要做什么你最初想︰

// some controller somewhere
use App\Models\Content;

class SomeController
{
    public function index()
    {
        $content = Content::with('category')->get();

        return View::make('ALL/Contents')->with('AllContent', $content); 
    }
}

// views/ALL/Contents.blade.php
<ul>
    @foreach ($AllContent as $content)
        <li>
            {{ $content->id }} - {{ $content->category->name }}
        </li>
    @endforeach
</ul>

但是,或者你可以返回的内容 id/类别名称作为 => 值数组键︰

// in the controller
$content = Content::with('category')->lists('category.name', 'id');

// in the view
<ul>
    @foreach ($AllContent as $id => $category)
        <li>
            {{ $id }} - {{ $category }}
        </li>
    @endforeach
</ul>

这是所有未经测试,但应该工作。如果不是,它应该至少给你怎样在一起的想法。

官方微信
官方QQ群
31647020