我想在laravel中组合两个独立的分页模型

我想在laravel中组合两个独立的分页模型,laravel,merge,eloquent,pagination,Laravel,Merge,Eloquent,Pagination,我想在laravel中组合两个单独的分页模型,但视图和分页中的错误不起作用。 我的控制器代码,我也尝试了不同的方法,数据来了,但分页不是我的目标分页 <?php namespace App\Http\Controllers\Frontend\News; use App\Http\Controllers\Controller; use App\Models\Blog; use App\Models\Company\CompanyEvent; class NewsController

我想在laravel中组合两个单独的分页模型,但视图和分页中的错误不起作用。 我的控制器代码,我也尝试了不同的方法,数据来了,但分页不是我的目标分页


<?php

namespace App\Http\Controllers\Frontend\News;

use App\Http\Controllers\Controller;
use App\Models\Blog;
use App\Models\Company\CompanyEvent;


class NewsController extends Controller
{


    function news()
    {

        $blogs       = Blog::sort()->with('company')->paginate(15);
        $events        = CompanyEvent::sort()->with('company')->paginate(15);


        $events=collect($events)->merge($blogs);

        return view('news.news',compact('events'));
    }


    function detail()
    {
        return "detail";
    }
}




我认为您应该使用原始查询。否则,重新构建您的模型..ı有不止一个关系..在原始的join查询中,您只需要外键列。如果您不理解,请发布您的数据库表,我将向您展示示例。
<?php

namespace App\Models;

use App\Models\Company\Company;
use App\Models\Interfaces\CreatedAt;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphToMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\Carbon;
use Illuminate\Http\Request;

/**
 * Class Blog
 * @package App\Models
 * @mixin Builder
 * @property boolean $active
 * @property  int $company_id
 * @property string $title
 * @property string $url
 * @property string $context
 * @property string $tags
 * @property  string $main
 * @property string $seo_title
 * @property string seo_description
 * @property string $seo_keyword
 * @property string $image
 * @property-read CreatedAt|Carbon $created_at
 * @property-read CreatedAt|Carbon $updated_at
 * @property-read CreatedAt|Carbon $deleted_at
 * @method static Builder|Blog find(int $id)
 * @method static Builder|Blog where($column, $operator = null, $value = null, $boolean = 'and')
 * @method static Builder|Blog findOrFail($id)
 * @method static Builder|Blog active()
 * @method Builder|Blog filter(Request $request)  bind to scopeFilter method
 * @method static Builder|Blog sort()  laravel query bind to scopeSort  method
 * @method static Builder|Blog latest()  laravel query bind to scopeSort  method
 *
 */
class Blog extends Model
{

    use SoftDeletes;

    protected $table = 'blogs';


    /**
     * @return bool
     */
    public function isActive(): bool
    {
        return (bool)$this->active;
    }

    /**
     * @param bool $save
     * @return bool
     */
    public function toggleActive($save = false)
    {

        $this->active = !$this->active;

        if ($save == true)
            return $this->save();

        return false;
    }


    /**
     * @return MorphToMany
     */
    function comments()
    {
        return $this->morphToMany('App\Models\Blog', 'commentable');
    }


    /**
     * @return string
     */
    function getAgoTimeAttribute()
    {
        return Carbon::parse($this->created_at)->diffForHumans();
    }

    /**
     * @param $value
     * @return array
     *
     */
    function getTagsAsArrayAttribute($value)
    {
        return explode(',', $this->tags);
    }


    /**
     * @param Builder|Blog $query
     * @return mixed
     *
     */
    function scopeActive($query)
    {
        return $query->where('active', 1);
    }


    /**
     * @return BelongsTo
     */
    function company()
    {
        return $this->belongsTo(Company::class, 'company_id', 'id');
    }


    /**
     * @return string
     */
    function getTimeAgoAttribute()
    {

        return Carbon::parse($this->created_at)->diffForHumans();
    }


    /**
     * @return false|string
     */
    function getShortContextAttribute()
    {
        return substr($this->context, 0, 250);
    }


    /**
     * @param Blog|Builder $query
     * @param Request $request
     * @return mixed
     */
    function scopeFilter($query, $request)
    {

        $requests = $request->except('page');

        foreach ($requests as $key => $val)
            $query = $query->where($key, 'like', '%' . $val . '%');


        return $query;
    }


    /**
     * @param Builder|Blog $query
     * @return mixed
     */
    function scopeSort($query)
    {
        return $query->orderBy('created_at', 'desc');
    }


}


<?php

namespace App\Models\Company;

use App\Calendar\Day\Day;
use App\Calendar\Month\Month;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Query\Builder;

/**
 * Class CompanyEvent
 * @mixin Builder
 * @package App\Models\Company
 * @property \DateTime $date
 * @method static Builder|CompanyEvent get()
 * @method static Builder|CompanyEvent find($id)
 * @method static Builder|CompanyEvent findOrFail($id)
 * @method static Builder|CompanyEvent active()  bind to scopeActive
 * @method static Builder|CompanyEvent sort()
 * @method static Builder|CompanyEvent latest()
 *
 */
class CompanyEvent extends Model
{

    use SoftDeletes;


    protected $table = 'company_events';


    /**
     * get day name  from date column
     * @return string
     *
     */
    function getDayNameAttribute()
    {
        $dayIndex = (int)date('w', strtotime($this->date));
        return ucfirst(Day::DAY_NAMES[$dayIndex]);
    }


    /**
     * get month from date column
     * @return string
     */
    function getMonthAttribute()
    {
        $monthIndex = (int)date('m', strtotime($this->date));
        return ucfirst(Month::MONTH_NAMES[$monthIndex - 1]);
    }


    /**
     * @return false|string
     */
    function getDayAttribute()
    {
        return date('d', strtotime($this->date));
    }


    /**
     * @return bool
     *
     */
    function getIsExpireDateAttribute()
    {


        $date = date('Y-m-d', strtotime($this->date));
        $todayDateAsTime = strtotime(date('Y-m-d'));
        $eventDateAsTime = strtotime($date);


        if ($todayDateAsTime > $eventDateAsTime)
            return true;

        return false;

    }


    /**
     * @return bool
     *
     */
    function getIsEventTodayAttribute()
    {
        $date = date('Y-m-d', strtotime($this->date));
        $todayDateAsTime = strtotime(date('Y-m-d'));
        $eventDateAsTime = strtotime($date);


        return (boolean)($eventDateAsTime == $todayDateAsTime);


    }


    /**
     * @return string
     */
    function getAgoTimeAttribute()
    {
        return Carbon::parse($this->date)->diffForHumans();
    }


    /**
     * @return BelongsTo
     */
    function company()
    {

        return $this->belongsTo(Company::class, 'company_id', 'id');

    }


    /**
     * @param Builder|CompanyEvent $query
     * @return mixed
     */
    function scopeActive($query)
    {
        return $query->where('active', 1);
    }

    /**
     * @param Builder|CompanyEvent $query
     * @return mixed
     */
    function scopeSort($query)
    {
        return $query->orderBy('created_at','desc');

    }


}


<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Mr. Burhan</title>
</head>
<body>

{{$events->total()}} adet bulundu
<ul>

    @foreach( $events as $value )
            <li>{{$value}}</li>
    @endforeach

</ul>
{{$events->appends(request()->all())->render()}}


</body>
</html>