【问题标题】:Show data of two table not to join in laravel在laravel中显示两个表的数据不加入
【发布时间】:2021-07-01 03:37:54
【问题描述】:

我有两张桌子:

  • 活动idnamestatuscreated_at
  • active_campaign: id, campaign_id, price, quantity

现在我将显示表格字段的值:active_campaign by campaign_id

有没有一种方法,我不需要加入campaign 表,仍然根据active_campaign 表的campaign_id 显示campaign 表的name


示例:

campaign:

id name status created_at
1 test 1 1 2021/07/01

active_campaign

id campaign_id price quantity
1 1 10 5

现在我想通过active_campaign table 显示:

name price quantity createdAt
test 1 10 5 2021/07/01

不加入?有什么办法请帮助我吗?谢谢。

【问题讨论】:

  • 你试过relations 吗?这是最基本的 Laravel DB 东西...
  • 最佳实践是加入。如果您不加入,那么您将不得不一个接一个地运行两个查询,这将是昂贵的。取决于您的情况。
  • 简单使用HasOne Realtion,然后使用它
  • 1) Laravel 关系可以帮助你,让你免于加入。 2) 如果您想尝试使用 DB::RAW,加入也很容易

标签: laravel eloquent laravel-8


【解决方案1】:

简单使用https://laravel.com/docs/8.x/eloquent-relationships#one-to-one

ActiveCampaign 模型

public function campaign() {
    return $this->hasOne(Campaign::class);
}

控制器方法

$result = ActiveCampaign::first();

你可以直接访问它。

$result->campaign->name;

【讨论】:

  • 谢谢兄弟。我在控制器处处理:$list = ActiveCampaign::select('id','campaign_id')->get();。然后我 foreach 变量 $list:foreach ($list as $val) { $val->campaign->name },出现错误:尝试获取非对象的属性“名称”。
  • $val['campaign']['name']
  • 并与('campaign')一起使用
【解决方案2】:

您可以在“active_campaign”表的模型中添加方法,如下面的代码。

public function campaign()
{
    $this->belongsTo('App\Models\Campaign', "id", "campaign_id")->select("name");
}

然后您可以访问如下名称

$active_campaign->campaign->name;

【讨论】:

    猜你喜欢
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多