Nano Hash - криптовалюты, майнинг, программирование

Laravel 5.1 находит электронную почту владельца проекта с project_id в другой таблице

Я пытаюсь найти электронную почту пользователя, когда знаю идентификатор проекта.

Итак, в моих табличных проектах, например, у меня есть запись: id: 1 user_id: 6

Я знаю, что хочу найти адрес электронной почты пользователя 6 в моей таблице пользователей: например: id: 6 электронная почта: [email protected]

так что в результате я хочу получить [email protected]

Я пробовал что-то вроде этого, но, похоже, не работает:

$projectOwnerEmail = DB::table('users')
        ->select('email')
        ->where('id', '=', $input['project_id'])
        ->join('projects', 'users.id', '=', 'projects.user_id')
        ->get();

Большое спасибо!


  • Есть ли причина, по которой вы не используете просто DB::table('users')->where('user_id', 6)? 24.11.2015
  • @user3158900 user3158900 Я предполагаю, что идентификатор здесь — это project_id, а не user_id, как указано в вопросе :). 24.11.2015
  • Да точно у меня есть доступ только к project_id 24.11.2015

Ответы:


1

Запрос, который вы создаете с помощью Query Builder, выглядит следующим образом:

SELECT email
FROM users
INNER JOIN projects ON users.id = projects.user_id
WHERE id = ?

Проблема в том, что при оценке условия невозможно определить, пытаетесь ли вы сравнить id таблицы users или id таблицы projects. Это приводит к ошибке нарушения ограничения целостности:

SQLSTATE [23000]: нарушение ограничения целостности: 1052 Идентификатор столбца в предложении where неоднозначен

Чтобы исправить это, вам просто нужно указать таблицу для столбца id следующим образом:

->where('projects.id', '=', $input['project_id'])

Кроме того, использование get вернет коллекцию, что нормально, потому что вы можете получить доступ к электронной почте, как $projectOwnerEmail[0]->email, но это кажется слишком сложным. Вместо этого вы можете использовать pluck, который вместо этого вернет строку с адресом электронной почты:

$projectOwnerEmail = DB::table('users')
    ->select('email')
    ->where('projects.id', '=', $input['project_id'])
    ->join('projects', 'users.id', '=', 'projects.user_id')
    ->pluck('email');

Теперь у вас есть строка электронной почты, хранящаяся непосредственно в переменной $projectOwnerEmail.

24.11.2015
  • Вау, спасибо за подробное объяснение! Я так многому научился! Удивительно! 24.11.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..