返回Laravel中由外键连接的两个表的结果。

时间:2018-03-17 05:06:44

标签: php mysql laravel laravel-5 eloquent

我在MySQL中有两个表,其中一个表引用另一个表。

第一个是users

enter image description here

第二个表是event表,其中包含引用users表中creator_id的{​​{1}}。所以id是外键。

enter image description here

现在我的问题是如何使用laravel获取拥有creator_id表中每列的每个用户的名称。

我对如何做到这一点毫无头绪。我到目前为止阅读的laravel文档没有帮助。

这是event表的模型。

event

用户的模型是:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Auth;
use App\signupModel;


class eventModel extends Model
{
    //


      public $table = "event";

      protected $fillable = ['title', 'description', 'event_flier', 'event_logo', 'org_name', 'org_logo', 'free', 'state', 'city' ];

      public function getUser(){
        $id = Auth::user()->id;
        return users::where('id', $this->id); 

      }


}
?>

我只想要一种方法,当使用laravel登录时,每个用户都可以从<?php namespace App; use Illuminate\Database\Eloquent\Model; class signupModel extends Model { // public $table = "users"; protected $primaryKey = 'id'; protected $fillable = [ 'first_name', 'last_name', 'email', 'password', 'gender', 'phoneNumber', 'twitter', 'facebook', 'instagram', 'dob' ]; } 表中查看他的数据。

请帮忙。谢谢。

3 个答案:

答案 0 :(得分:1)

此处使用belongsTo返回事件的创建者。     

namespace App;

use Illuminate\Database\Eloquent\Model;
use Auth;
use App\signupModel;

class eventModel extends Model
{
      public $table = "event";

      protected $fillable = ['title', 'description', 'event_flier', 'event_logo', 'org_name', 'org_logo', 'free', 'state', 'city' ];

      public function getUser(){
        return $this->belongsTo('App\signupModel', 'creator_id');
      }

}
?>

在您的控制器中,您可以按如下方式检索事件的创建者

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\eventModel;
use App\signupModel;

class HomeController extends Controller
{
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $event = eventModel::find(1);
        $creator = $event->getUser;  // return user instance
        dump($creator); // for check result
        echo $creator->first_name;  //print firstname of creator
    }
}

答案 1 :(得分:1)

您需要在用户模型中执行

public function getEvents(){
        return $this->hasOne('Your event model', 'creator_id');
      }

并在您的控制器中导入模型并尝试

$events=User::with('getEvents')->get();

或者如果你想获取一条记录,你应该在你的控制器中尝试这个

$events=User::find('Your Auth Id');
$creators=$events->getEvents;

或者你也应该试试这个

$users = DB::table('users')
            ->leftJoin('events', 'users.id', '=', 'events.creator_id')->where('users.id','=','Your user id')
            ->get();

答案 2 :(得分:1)

  

事件属于其所有者(用户)

如果您遵循核心Laravel语法,则事件模型必须如下所示:

class Event extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

用户模型必须如下:

class User extends Model
{
    public function event()
    {
        return $this->hasOne('App\Event');
    }
}

如果是这样,你可以使用:

$events = App\User::find(1)->event;

这是一种常见情况,您可以根据您的关系类型使用您的逻辑。这是doc