【问题标题】:Eloquent belongs to relationship not working口才属于关系不工作
【发布时间】:2016-05-09 00:47:39
【问题描述】:

好的,所以一直在尝试弄清楚如何建立这种关系。使用雄辩的流明。我有两张桌子。列表表。其中包含控制台。我不想要他们的 emum 或纯文本,所以我想将其提取到控制台表中。控制台 1、控制台 2 等,但由于某种原因我无法使关系匹配。

Listing Table:
id: 1 | console_id: 3
id: 2 | console_id: 4
id: 3 | console_id: 3
id: 4 | console_id: 2

Console Table:
id: 1 | console: Console 1
id: 2 | console: Console 2
id: 3 | console: Console 3

现在在我的列表模型中,我有:

public function console()
{
    return $this->belongsTo('App\Console');
} 

关系破裂或者我不明白这种关系应该如何联系在一起......

【问题讨论】:

    标签: laravel eloquent relationships lumen


    【解决方案1】:

    我认为你的类不能有控制台名称,因为 Laravel 有控制台命名空间或自动加载器会尝试加载它的类。

    1) 将您的 Console 类重命名为 ConsoleItem

    2) 尝试这样写,准确输入字段(因为我们不想更改表结构):

    public function console()
    {
        return $this->belongsTo('App\ConsoleItem', 'console_id', 'id');
    } 
    

    3) 使用 with() 调用控制台获取:

    $Listings = Listing::with(['console'])->whereConsoleId(3)->get();
    foreach($Listings AS $Listing) {
      echo 'Listing: '.$Listing->id.' | Console: '.$Listing->console->console."<br/>";
    }
    

    如果还是不行,就要分析原因。

    所以请为您的模型添加文件内容。

    4) 使用 cli 命令清理自动加载器缓存,为作曲家减少自动加载器并清理等:

    php artisan clear-compiled
    composer dump-autoload
    

    但是!最好将您的模型放在 app/Models 文件夹中,并具有如下代码:

    <?php namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Console extends Model
    

    那么您的列表将如下所示:

    <?php namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Listing extends Model {
    
      protected $table = 'listing';
      public $timestamps = false;
    
      public function console() {
        return $this->belongsTo('App\Models\Console', 'console_id');
      }
    }
    

    在控制器中使用它们:

    use App\Models\Listing;
    

    查看截图:http://joxi.ru/82QWW0f1a4YXrd

    【讨论】:

    • 好的。所以添加 App\ 专门解决了关系问题!然而。 (我正在尝试构建一个 API。)并且会喜欢当我说 Listing::all() 时它会提取文本而不是数字......从数据库中提取时关系如何触发?
    • 像这样使用它:Listing::with(['console'])->get();但如果表有数千个数据,我建议您使用它,例如:Listing::with(['console'])->paginate(50);并让您的 API 更明智地使用它,通过发送如下请求:somesite.com/api/listing?page=2 这将告诉模型自动返回接下来的 50 个元素。
    • 嗯所以 $listings = Listing::with(['console'])->get(); dd($listings);仍然返回 id 而不是名称...
    • 检查您的关系,以获得适当的绑定。也尝试做 var_dump($listings->toArray());或加我到 Skype:anarjafarov 我会帮助你
    • 感谢所有帮助的人。现在不能跳Skype。我想我的主要问题是我是否正确设置了我的表格?这是我应该为查找表做的吗?还是我做错了?如果我走在正确的道路上,我可以再摸索一下并弄清楚。或者他们的处理方式不同。
    猜你喜欢
    • 2018-01-10
    • 2018-05-18
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    相关资源
    最近更新 更多