【问题标题】:Laravel: How do I get the last field from a different table?Laravel:如何从不同的表中获取最后一个字段?
【发布时间】:2021-03-14 16:08:22
【问题描述】:

我有 2 张桌子,即 Pt 桌子和 Aktivitas 桌子。在索引视图中,我从两个表中调出数据。来自表 pt 的列名 pt。以及活动表中的最后一个更新和用户列。一个 pt 名称有很多活动,因此在数据库中有很多来自列 updated_at & user 的内容。 我的问题是,如何显示最新的 updated_at 和用户?因为我已经尝试过了,但我的索引总是显示来自第一个数据的最后更新和用户。

我的刀片文件

@foreach($pt_list as $pt)
<tr>
 <td>{{ $no }}</td>
 <td>{{ $pt->kode_pt }}</td>
 <td>{{ $pt->nama_pt }}</td>
 <td>{{ $pt->status }}</td>
 <td>{{ $pt->aktivitas->updated_at }} </td>
 <td>{{ $pt->aktivitas->user }}</td>

Aktivitas 模型

class Aktivitas extends Model
{
    protected $table = 'aktivitas';
    protected $fillable = ['nama_aktivitas', 'pt_id', 'tempat', 'tgl_aktivitas', 'jenis_aktivitas', 'dokumen', 'tenggat_waktu','deskripsi', 'status', 'updated_at', 'user'];
    
    public function pt()
    {
    return $this->belongsTo('App\Pt', 'pt_id')->withDefault();
    }

}

Pt 模型

class Pt extends Model
{

    const created_at = 'create_time';
    const updated_at = 'update_time'; 

    protected $table = 'pt';

    protected $fillable = [
        'kode_pt',
        'nama_pt',
        'status',
        'updated_at'
    ];

    public function aktivitas()
    {
    return $this->hasOne('App\Aktivitas')->withDefault();
    }

} 

点控制器

public function index (Request $request)
    {
        $pt_list = Pt::all();
        
        return view('pt.index', compact('pt_list'));
    }

【问题讨论】:

  • 欢迎来到stackoverflow。你想得到类似Pt::latest()-&gt;first(); 的东西吗?
  • @BABAKASHRAFI 是的,仍然不能。试图获取非对象的属性“kode_pt”

标签: laravel


【解决方案1】:

您可以在Pt模型上建立另一个关系以获得最新的Aktivita


public function aktivitas()
{
    return $this->hasMany('App\Aktivitas')->withDefault();
}

public function latestAktivita()
{
    return $this->hasOne('App\Aktivitas')->latest()->withDefault();
}

然后你可以在你的控制器方法查询中使用这个 hasOne 关系

public function index (Request $request)
{
    $pt_list = Pt::with('latestAktivita')->all();
        
    return view('pt.index', compact('pt_list'));
}

修改刀片 sn-p 以使用新关系

@foreach($pt_list as $pt)
    <tr>
         <td>{{ $no }}</td>
         <td>{{ $pt->kode_pt }}</td>
         <td>{{ $pt->nama_pt }}</td>
         <td>{{ $pt->status }}</td>
         <td>{{ $pt->latestAktivita->updated_at }} </td>
         <td>{{ $pt->latestAktivita->user }}</td>
    </tr>
@endforeach

【讨论】:

  • 谢谢您的回答。有用!!很高兴 GBU!
  • 它有效。最新记录我更新了它在刀片上的回报。但是如果我用我之前插入的相同 id 更新第一条记录,则记录会更新但不会返回刀片视图。它只显示最新的记录,而不是最新的更新记录。请告诉我怎么做
  • 如果您总是想要最新的更新记录,那么您可以在最新的Aktivita 关系声明中指定return $this-&gt;hasOne('App\Aktivitas')-&gt;latest('updated_at')-&gt;withDefault();
猜你喜欢
  • 2017-08-29
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 2020-03-23
  • 2014-08-25
相关资源
最近更新 更多