在控制器中获取特定信息?

时间:2019-11-28 00:02:28

标签: php laravel controller laravel-6 laravel-6.2

我的控制器出现问题,无法在其中获取数据。我的问题是,当我让我的团队像这样:

$team = Team::where('join_number', '=', $data['team'])->get();

我似乎无法通过

访问它
$team->join_request_needed = 'True'

例如?如果我只是死掉

$team->join_request_needed

我得到一个“此集合实例上不存在属性[join_request_needed]”。 我该如何访问这些数据?如果我死于$ team,我会得到这个;这样就可以获取数据了?

Illuminate\Database\Eloquent\Collection {#282 ▼
  #items: array:1 [▼
    0 => App\Team {#291 ▼
      #guarded: []
      #connection: "sqlite"
      #table: "teams"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:8 [▶]
      #original: array:8 [▼
        "id" => "1"
        "user_id" => "1"
        "name" => "team1"
        "description" => null
        "join_request_needed" => "0"
        "join_number" => "1574832472024"
        "created_at" => "2019-11-27 05:27:52"
        "updated_at" => "2019-11-27 22:46:55"
      ]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #fillable: []
    }
  ]
}

这是我的整个功能(到目前为止,由于我一直无法获取数据,目前为止还很粗糙):

public function check() {
    $data = request()->validate([
        'email' => ['required', 'email'],
        'team' => ['required', 'alpha_num', 'exists:teams,join_number']
    ]);

    $team = Team::where('join_number', '=', $data['team'])->get();

    if ($team->join_request_needed = 'True') {
        if (Member::where('email', '=', $data['email'])->count() > 0) {
            $member = Member::where('email', '=', $data['email']);
            if ($member->approved = 'True') {
                // member has been accepted
                return view('portal.members.answer', [
                    'team' => $team
                ]); // questions
            } else {
                // member has not been accepted
                dd('member has not been accepted');
                return view(''); // waiting screen
            }
        } else {
            // create a join request for the member
            $team->member()->create([
                'email' => $data['email']
            ]);
            return view(''); // waiting screen
        }
    } else if(Member::where('email', '=', $data['email'])->count() > 0) {
        // no join request needed, member already exists
        return view('portal.members.answer', [
            'team' => $team
        ]); // questions
    } else {
        // no join request needed, need to create member
        dd($team);
        $team->member()->create([
            'email' => $data['email']
        ]);
        return view('portal.members.answer', [
            'team' => $team
        ]); // questions
    }
}

2 个答案:

答案 0 :(得分:1)

在您的情况下,团队是团队的集合,因此您可以使用querybuilder方法first()

$team = Team::where('join_number', '=', $data['team'])->first();

由于查询的工作方式,在查询生成器上调用get将始终返回一个集合。如果要使用单个对象,请选择first()find()

答案 1 :(得分:0)

由于您使用Team获得了join_number = $data['team']的集合 您需要先为$team循环。但是,如果您只想让一个$ team拥有一个join_number = $data['team'],则应该执行first()而不是get()

相关问题